home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d16 / snap402i.arc / SNAP.DOC < prev    next >
Text File  |  1990-09-07  |  183KB  |  4,880 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.                                          SNAP!
  19.                           Documentation and Development System
  20.                                for dBASE, Clipper, FoxPro
  21.                                   and Similar Systems
  22.  
  23.  
  24.                         Written by Walter J. Kennamer 74025,514
  25.  
  26.  
  27.  
  28.                                  ┌─────────┐                  
  29.                            ┌─────┴───┐     │              (tm)
  30.                          ──│         │o    │──────────────────
  31.                            │   ┌─────┴╨──┐ │  Association of  
  32.                            │   │         │─┘  Shareware       
  33.                            └───│    o    │    Professionals   
  34.                          ──────│    ║    │────────────────────
  35.                                └────╨────┘    MEMBER          
  36.  
  37.  
  38.  
  39.                                         License
  40.  
  41.              Copyright (c) 1986-1989 Walter J. Kennamer. All Rights
  42.              Reserved.
  43.  
  44.              You are free to use, copy and distribute SNAP! providing that:
  45.  
  46.                NO FEE IS CHARGED FOR USE, COPYING OR DISTRIBUTION.
  47.  
  48.                IT IS NOT MODIFIED IN ANY WAY.
  49.  
  50.                THIS DOCUMENTATION FILE (UNMODIFIED) ACCOMPANIES ALL COPIES.
  51.  
  52.              This program is provided AS IS without any warranty, expressed
  53.              or implied, including but not limited to fitness for a
  54.              particular purpose.
  55.  
  56.              dBASE II, dBASE III, dBASE IV are trademarks of Ashton-Tate.
  57.              Clipper is a trademark of Nantucket Software.  FoxBASE,
  58.              FoxBASE+ and FoxPro are trademarks of Fox Software, Inc.  UNIX
  59.              is a trademark of AT&T.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.                                    Table of Contents
  69.  
  70.              Overview  . . . . . . . . . . . . . . . . . . . . . . . .    4
  71.                Dbase Dialects  . . . . . . . . . . . . . . . . . . . .    5
  72.                Registration Fee  . . . . . . . . . . . . . . . . . . .    5
  73.  
  74.              Getting Started . . . . . . . . . . . . . . . . . . . . .    6
  75.                Basic Operation   . . . . . . . . . . . . . . . . . . .    6
  76.                A Tour of the SNAP! Screens   . . . . . . . . . . . . .    7
  77.                Author and Copyright Holder   . . . . . . . . . . . . .    7
  78.                Paths   . . . . . . . . . . . . . . . . . . . . . . . .    7
  79.                Saving and Restoring Default Choices  . . . . . . . . .    9
  80.                Abbreviations   . . . . . . . . . . . . . . . . . . . .    9
  81.                Status Reports  . . . . . . . . . . . . . . . . . . . .   10
  82.                Searching the Program Tree  . . . . . . . . . . . . . .   10
  83.                dBASE Version?  . . . . . . . . . . . . . . . . . . . .   11
  84.                Ignoring Drive Designations   . . . . . . . . . . . . .   11
  85.                Printing SNAP! Documentation  . . . . . . . . . . . . .   11
  86.                Using a Mouse   . . . . . . . . . . . . . . . . . . . .   13
  87.  
  88.              SNAP! Commands  . . . . . . . . . . . . . . . . . . . . .   14
  89.                Macros  . . . . . . . . . . . . . . . . . . . . . . . .   14
  90.                Indirect References   . . . . . . . . . . . . . . . . .   16
  91.                SNAPCODE--Fake Program Statements   . . . . . . . . . .   16
  92.                Program Narratives  . . . . . . . . . . . . . . . . . .   17
  93.                Other SNAP! Directives  . . . . . . . . . . . . . . . .   17
  94.  
  95.              Source Code Formatting Options  . . . . . . . . . . . . .   19
  96.                File Headings   . . . . . . . . . . . . . . . . . . . .   19
  97.                Indentation   . . . . . . . . . . . . . . . . . . . . .   20
  98.                Capitalization  . . . . . . . . . . . . . . . . . . . .   21
  99.                Key Word Expansion and Compression  . . . . . . . . . .   22
  100.                Suppressing Blank Lines and Comments  . . . . . . . . .   23
  101.                Key Words File  . . . . . . . . . . . . . . . . . . . .   23
  102.  
  103.              Reports and Outputs . . . . . . . . . . . . . . . . . . .   26
  104.                Controlling the Printer   . . . . . . . . . . . . . . .   26
  105.                Tree Structure Diagram  . . . . . . . . . . . . . . . .   27
  106.                File List   . . . . . . . . . . . . . . . . . . . . . .   28
  107.                Data Dictionary   . . . . . . . . . . . . . . . . . . .   28
  108.                Index File Summary  . . . . . . . . . . . . . . . . . .   30
  109.                Format File Summary   . . . . . . . . . . . . . . . . .   31
  110.                Report Form Summary   . . . . . . . . . . . . . . . . .   31
  111.                Label Form Summary  . . . . . . . . . . . . . . . . . .   32
  112.                Procedure File Summary  . . . . . . . . . . . . . . . .   32
  113.                Other Summary Reports   . . . . . . . . . . . . . . . .   32
  114.                Variable Cross-Reference Report   . . . . . . . . . . .   32
  115.                LNK and MAKE files  . . . . . . . . . . . . . . . . . .   36
  116.                Batch Files   . . . . . . . . . . . . . . . . . . . . .   37
  117.                Action Diagrams   . . . . . . . . . . . . . . . . . . .   38
  118.                Source Code Printout  . . . . . . . . . . . . . . . . .   41
  119.  
  120.                                            2
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.                Printing Without Documenting (Reprinting)   . . . . . .   43
  129.  
  130.              Using SNAP! in a Batch Environment  . . . . . . . . . . .   44
  131.  
  132.              Random Notes  . . . . . . . . . . . . . . . . . . . . . .   45
  133.  
  134.              Program Limitations . . . . . . . . . . . . . . . . . . .   46
  135.                Legal Coding that is Prohibited by SNAP!  . . . . . . .   46
  136.                Hyphens in Filenames  . . . . . . . . . . . . . . . . .   47
  137.                Continuation Lines  . . . . . . . . . . . . . . . . . .   47
  138.                Multiple Procedure Files  . . . . . . . . . . . . . . .   48
  139.                Suppressing Color   . . . . . . . . . . . . . . . . . .   48
  140.  
  141.              Change History  . . . . . . . . . . . . . . . . . . . . .   49
  142.  
  143.              Administrative Matters  . . . . . . . . . . . . . . . . .   53
  144.                Version Numbers   . . . . . . . . . . . . . . . . . . .   53
  145.                Updates and New Versions  . . . . . . . . . . . . . . .   53
  146.                How to Get Support  . . . . . . . . . . . . . . . . . .   53
  147.                Association of Shareware Professionals  . . . . . . . .   54
  148.  
  149.              Acknowledgements  . . . . . . . . . . . . . . . . . . . .   55
  150.  
  151.              Appendix A -- Sample Reports  . . . . . . . . . . . . . .   56
  152.  
  153.              Index . . . . . . . . . . . . . . . . . . . . . . . . . .   77
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.                                            3
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.                                         Overview
  193.  
  194.              (A short note to the faithful: those of you who have used
  195.              SNAP! before may wish to turn directly to the Change History
  196.              where new features in version 4.0 are summarized.)
  197.  
  198.              SNAP! makes documenting Dbase programs a snap.  SNAP! is
  199.              designed to produce technical documentation for an entire
  200.              Dbase system.  Its reports include:
  201.  
  202.                Formatted source code listings
  203.                System summary showing lines of code, file statistics, etc. 
  204.                Variable cross-reference report
  205.                Tree structure of the system.  The tree optionally can also
  206.                   show databases, index files, etc. used by each program. 
  207.                List of all files in the system, plus a source reprint file
  208.                Data dictionary
  209.                Index file summary
  210.                Format file summary
  211.                Label form summary
  212.                Report form summary
  213.                Procedure/function file summary
  214.                BIN file summary
  215.                Memory file summary
  216.                Other files summary
  217.                Link files for Clipper applications (either PLINK86, TLINK,
  218.                   MS-LINK)
  219.                Make file for Clipper applications
  220.                Action diagrams
  221.                Batch files to back up programs, databases, etc. 
  222.                Batch file to move SNAP! output files back to the source
  223.                   subdirectory
  224.  
  225.              In addition, on each program file, SNAP! can write a heading
  226.              showing:
  227.  
  228.                Program name
  229.                System name
  230.                Author and copyright notice
  231.                Which programs, procedures and function call this program
  232.                Which programs, procedures and functions this program calls
  233.                Databases used
  234.                Index files used
  235.                Formats used
  236.                Report forms used
  237.                Procedures
  238.                 BIN files called or loaded
  239.                Memory files used
  240.                Date and time last modified
  241.  
  242.                                            4
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249.  
  250.  
  251.              If you wish, all source code headings can also be echoed to a
  252.              separate file.  Additionally, SNAP! can indent your source
  253.              code and capitalize dBASE key words to make your code easier
  254.              to read, understand and maintain.
  255.  
  256.              Unlike many other Dbase documentation systems, SNAP!
  257.              documentation is system-wide.  In other words, not only can it
  258.              tell you where variable X was used in a particular program, it
  259.              can cross-reference all occurrences of variable X anywhere in
  260.              the program system you are documenting.  You merely enter the
  261.              "top" program file name, and SNAP! does the rest.  Of course,
  262.              you may also document a single program if you wish.
  263.  
  264.  
  265.              Dbase Dialects
  266.  
  267.              SNAP! fully supports the following dialects of the Dbase
  268.              language:
  269.                dBASE II
  270.                dBASE III
  271.                dBASE III+
  272.                dBASE IV 1.0
  273.  
  274.                FoxBASE
  275.                FoxBASE+ 2.1
  276.                FoxPro 1.0
  277.  
  278.                Clipper (releases through Summer '87)
  279.  
  280.              In addition, SNAP! generally handles dbXL, Quicksilver and
  281.              VP-INFO programs pretty well.  However, I do not guarantee
  282.              that it fully supports all features of these products.
  283.  
  284.              Registration Fee
  285.  
  286.              There isn't one.  SNAP! can be copied and distributed freely,
  287.              as long as it is unchanged and you include this document file
  288.              unmodified.  I encourage you to give copies to your friends
  289.              and co-workers, to upload them to bulletin boards, and to
  290.              leave them in bus stations.
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302.  
  303.                                            5
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
  311.  
  312.                                     Getting Started
  313.  
  314.              First, make a backup copy of your program files.  I have tried
  315.              to test SNAP! on a variety of hardware and software
  316.              combinations, and there shouldn't be any danger, but I would
  317.              feel awful if anyone lost program files due to some curious
  318.              combination of resident programs, unusual equipment and
  319.              sunspot activity, not to mention (gasp!) "features."  SNAP!
  320.              has been around for several years now and nobody has reported
  321.              that SNAP! has ever corrupted source code, but I would hate
  322.              for you to be the first.
  323.  
  324.  
  325.              Basic Operation
  326.  
  327.              SNAP! is very easy to use.  If you accept the program's
  328.              default options, you only have to enter the following
  329.              information on the TopFile screen:
  330.  
  331.                "Top" file name
  332.                System name
  333.                Author and copyright information
  334.                Paths for program, data, output and SNAP! files
  335.  
  336.              If you are happy with the defaults, just enter the information
  337.              on the first screen (the System screen), press F10 to see the
  338.              main menu, then press 'B' to begin documenting your system.
  339.  
  340.              The term "TopFile" (spelled and punctuated in a variety of
  341.              ways) is used throughout this documentation to mean the first
  342.              file in a system--the one first invoked.
  343.  
  344.              You can press F10 to see the main menu.  Its choices largely
  345.              correspond to various option screens.  For example, you set
  346.              report options on the Reports Screen and there is a "Reports"
  347.              choice on the main menu.
  348.  
  349.              If you don't want to use the menu, you can save a keystroke or
  350.              two by using the Alt key in combination with the menu choice
  351.              you want.  For example, without pressing F10 to pop up the
  352.              menu, you can press Alt-R to see the Reports Screen, Alt-B to
  353.              Begin Documenting, Alt-Q to quit and so forth.  Also, the
  354.              Ctrl-PgUp and Ctrl-PgDn keys take you to the preceding and
  355.              succeeding screens respectively.
  356.  
  357.              The line at the bottom of the screen tells you which function
  358.              keys are active.  You can access these functions by pressing
  359.              the function key or by pointing at the description on the
  360.              bottom of the screen with a mouse.  At any point, you can
  361.              press the F1 key to receive context-sensitive help.  Help is
  362.              available for each field.
  363.  
  364.                                            6
  365.  
  366.  
  367.  
  368.  
  369.  
  370.  
  371.  
  372.  
  373.              The SNAP! system is composed of the following files:
  374.                SNAP.EXE     -- main program file
  375.                SNAP.HLP     -- help file
  376.                SNAP.DOC     -- this documentation file
  377.                DB2WORDS.SNP -- key word file for dBASE II/FoxBASE 
  378.                DB3WORDS.SNP -- key word file for dBASE III/Clipper/FoxBASE+
  379.                DB4WORDS.SNP -- key word file for dBASE IV/FoxPro
  380.                SNAPPRT.SNP  -- printer definitions
  381.                filename.KEY -- key word files for third-party libraries
  382.  
  383.              All of these files must be in the same subdirectory, which may
  384.              be different than the subdirectory in which your dBASE source
  385.              code files are stored.
  386.  
  387.  
  388.              A Tour of the SNAP! Screens
  389.  
  390.              SNAP! has seven main screens on which you can select various
  391.              combinations of options:
  392.                System: Contains system-level information (system name,
  393.                        author, top file name, etc.).
  394.                Report: Determines which documentation reports will be
  395.                        generated.
  396.                Format: Determines source code formatting and action diagram
  397.                        options in effect.
  398.                Xref:   Determines what kinds of words will be in the cross-
  399.                        reference.
  400.                Tree:   Determines what kinds of files will be shown on the
  401.                        tree diagram.
  402.                Print:  Determines source code printing parameters. Other: 
  403.                        Other options.
  404.  
  405.              The next sections highlight a few of the fields that may have
  406.              hidden mysteries.
  407.  
  408.  
  409.              Author and Copyright Holder
  410.  
  411.              Enter the author and copyright holder in these fields.  This
  412.              information is used only in the program headings, and may be
  413.              omitted if you choose not to write program headings (you make
  414.              that choice on the Format screen).  If you enter either author
  415.              or holder, but not both, SNAP! assumes that they are the same.
  416.  
  417.  
  418.              Paths
  419.  
  420.              The TopFile menu screen has four fields for path
  421.              information--the path to the source code, data, output and
  422.              SNAP! files.  Your response should be a valid MS-DOS path,
  423.              with or without drive designation.  It doesn't matter if you
  424.  
  425.                                            7
  426.  
  427.  
  428.  
  429.  
  430.  
  431.  
  432.  
  433.              omit the final backslash (e.g., C:\SNAP is valid, as is
  434.              C:\SNAP\ or \SNAP).
  435.  
  436.              If the TopFile you specify cannot be found, or if the SNAP!
  437.              files are not where you say they are, SNAP! complains and will
  438.              not let you begin documentation.  If the output directory does
  439.              not exist, SNAP! will create it.
  440.  
  441.              If your input and output paths are different, SNAP! will not
  442.              modify your original source code files in any way.  Only the
  443.              output files will contain capitalized key words, indents,
  444.              headings and so on.
  445.  
  446.              On the other hand, if the source code and output paths are the
  447.              same, SNAP! adds .BAK extensions to your original input files
  448.              and creates modified output files with the original names. 
  449.              For example, if one of your input programs was named EDIT.PRG,
  450.              after running SNAP! it will be called EDIT.BAK and a new,
  451.              modified EDIT.PRG will be in the directory.  This scheme works
  452.              fine as long as all your input files have unique names (not
  453.              counting the extension).  Otherwise, all but the last
  454.              non-unique input file will be lost (though the modified output
  455.              files will still be there).  The best idea is never to direct
  456.              output to the input directory if the first eight characters of
  457.              all of your program files are not unique.
  458.  
  459.              All of your source code files--including programs, format
  460.              files, report forms, memory files and so forth--must be in the
  461.              same source directory for SNAP! to find them.  (Databases and
  462.              indexes can be either in the data directory or in the source
  463.              code directory.)  Even if the application runs fine in
  464.              multiple subdirectories under dBASE IV, you still need to move
  465.              all program files into a single subdirectory for SNAP!   If
  466.              you use explicit drive and path designations when you
  467.              reference another file, SNAP! will find it (as long as you
  468.              have not told SNAP! to ignore drive designations--see below),
  469.              but it otherwise cannot tell which subdirectory is current. 
  470.              Note that SNAP! pays no attention to "SET PATH TO" statements. 
  471.              SNAP! also cannot handle macro substitutions for drives or
  472.              paths.
  473.  
  474.              SNAP! never modifies database, index, report form, label form
  475.              or memory files.
  476.  
  477.              When SNAP! decides you are about to do something particularly
  478.              dangerous, it may require you to direct output files to a
  479.              different directory than the input files are in.  Some
  480.              "dangerous" options include expanding or compressing key words
  481.              and eliminating comments from source code.
  482.  
  483.  
  484.  
  485.  
  486.                                            8
  487.  
  488.  
  489.  
  490.  
  491.  
  492.  
  493.  
  494.              Saving and Restoring Default Choices
  495.  
  496.              As you use SNAP!, you may wish to modify the default values
  497.              for certain fields.  For example, you may want to set the
  498.              SNAP! path to \SNAP, or the author and copyright holder to
  499.              your name.  Press F5 to save the current values of each field. 
  500.              SNAP! will prompt you for a filename to use for the
  501.              configuration file.
  502.  
  503.              When you start SNAP!, you can specify the file to use for
  504.              default values by using the /F switch on the command line. 
  505.              For example, the command:
  506.                SNAP /fc:\foo\bar.baz  (note: no space between '/f' and the
  507.                filename).
  508.              tells SNAP! to look for a configuration file named 'bar.baz'
  509.              in the '\foo' subdirectory on drive c:.  If it cannot find it,
  510.              SNAP! will start with default values.  When you save the
  511.              configuration, SNAP! uses the name you specified.  If you do
  512.              not specify a file, SNAP! looks for one called CONFIG.SNP in
  513.              the current directory. If the file you specify does not have
  514.              an extension, SNAP! assumes the extension is '.SNP'.  So the
  515.              order for establishing defaults is:
  516.                1.  A configuration file you specify on the command line
  517.                2.  CONFIG.SNP in the current subdirectory
  518.                3.  SNAP! factory default values
  519.  
  520.              I ordinarily save a separate configuration file for each
  521.              system I use in the same subdirectory with the system.  This
  522.              is a big help for running SNAP! in batch mode (see below) and
  523.              for keeping subdirectories, filenames, etc. straight.
  524.  
  525.              You can also press F6 to retrieve saved specifications. 
  526.              Invoking SNAP! with the /F command-line parameter is
  527.              equivalent to entering the program, pressing F6 at the System
  528.              screen and entering a filename.
  529.  
  530.  
  531.              Abbreviations
  532.  
  533.              In general, SNAP! is pretty good about recognizing valid dBASE
  534.              abbreviations.  For example, it will properly detect that
  535.                <tab>DO <tab> WHIL<tab>
  536.              initiates a DO loop.  Version 3.00 also removed the earlier
  537.              restriction on abbreviating INDEX ('SET INDE TO foo' is fine
  538.              now).
  539.  
  540.              Also, if you use dBASE key words as variable names, SNAP! can
  541.              sometimes become confused.  For example, if you use 'PROC' as
  542.              a variable name within a procedure file and put the statement
  543.              'PROC = FOO' within the file, SNAP! will see the 'PROC' and
  544.              think that it is initiating a new procedure.  Common sense
  545.              will ordinarily avoid this problem.  As always, it is a good
  546.  
  547.                                            9
  548.  
  549.  
  550.  
  551.  
  552.  
  553.  
  554.  
  555.              idea not to use key words in a way other than that intended by
  556.              the language, especially if you plan to compile the code;
  557.              compilers tend to be more picky about this restriction than
  558.              interpreters.
  559.  
  560.  
  561.              Status Reports
  562.  
  563.              As SNAP! documents your programs, it updates a status screen
  564.              that tells you how much progress it has made.  The screen
  565.              shows the file that SNAP! is currently documenting and the
  566.              number of lines in the file.  SNAP! makes two passes through
  567.              each file--one to determine which files use or call which
  568.              other files, and one for cross-referencing variables,
  569.              formatting source code and preparing action diagrams.
  570.  
  571.              In addition, if you choose any option that modifies source
  572.              code (headings, indentation, key word capitalization,
  573.              compression or expansion, etc.), or if you choose to display
  574.              the cross-reference report, SNAP! will display a more
  575.              elaborate screen indicating how many programs, databases,
  576.              indexes, format files, report forms and variables it has
  577.              found, along with the total number of program lines documented
  578.              so far, and the amount of free memory available. This screen
  579.              also shows the elapsed time since you began documentation.
  580.  
  581.              Note: some people have reported that the elapsed time is
  582.              occasionally negative.  This is normal.  It means that your
  583.              computer is actually running faster than light.  It is nothing
  584.              to be concerned about unless you have an 8087 chip, which
  585.              sometimes overheats when moving backwards in time.
  586.  
  587.              If SNAP! identifies any errors during its run, it will print a
  588.              brief error message in a separate window in the upper right
  589.              corner of the screen.  All error messages are also echoed to
  590.              the ERROR.DOC file.
  591.  
  592.  
  593.              Searching the Program Tree
  594.  
  595.              SNAP! assumes that you want to document not only the TopFile,
  596.              but all programs it calls, all programs called by programs
  597.              that Top calls, and so on.  In fact, SNAP! will search the
  598.              program tree for all programs, databases, index files, report
  599.              forms, format files, label forms and memory files as it
  600.              prepares system documentation.  You never need to specify more
  601.              than the top program file name.
  602.  
  603.              If you choose not to search the tree (you can make this choice
  604.              on the Other Options Screen), only the specific file you enter
  605.              will be documented.  Thus, you can limit documentation to a
  606.  
  607.  
  608.                                            10
  609.  
  610.  
  611.  
  612.  
  613.  
  614.  
  615.  
  616.              particular file or a branch of the program tree by varying
  617.              either the file you input as Top or the search tree parameter.
  618.  
  619.              Note that SNAP! does not track "SET DEFAULT TO x" statements,
  620.              but always expects to see files with no drive designations on
  621.              the default drive and in the source file subdirectory.
  622.  
  623.  
  624.              dBASE Version?
  625.  
  626.              On the Other Options screen, SNAP! asks which version of Dbase
  627.              you are using.  You should answer "4" if this is a dBASE IV or
  628.              FoxPro system, or "3" if this is dBASE III or a dBASE III
  629.              "compatible" -- specifically Clipper, FoxBASE+, or
  630.              QuickSilver.  Answer "2" for dBASE II or FoxBASE (original,
  631.              dBASE II variety).
  632.  
  633.              SNAP! needs this information since different versions of Dbase
  634.              use different internal format for database and index files, as
  635.              well as different key words.  SNAP! reads Clipper index files,
  636.              and handles Clipper source code and databases without
  637.              difficulty. If a specified dBASE III index file is not found,
  638.              SNAP! automatically searches for the corresponding Clipper
  639.              index file (with an NTX extension). SNAP! will also
  640.              automatically detect FoxBASE index files (IDX extension) and
  641.              document them properly.
  642.  
  643.              Further, if you say that your system is a dBASE IV-type
  644.              system, SNAP! assumes that report form files are in dBASE IV
  645.              format.  If they are not, the system can hang when SNAP!
  646.              bravely tries to read data that isn't there.
  647.  
  648.  
  649.              Ignoring Drive Designations
  650.  
  651.              Sometimes you may want SNAP! to disregard explicit drive and
  652.              path designations when searching for data files.  A choice on
  653.              the Other Options screen instructs SNAP! to drop any drive or
  654.              path designations before attempting to find a file.  As an
  655.              example, you may have written a backup routine to copy a
  656.              database to B:BACKUP.DBF.  If you would like SNAP! not to try
  657.              to find that file on the B: drive, choose the option to ignore
  658.              drive designations.  This option has no effect on SNAP!'s
  659.              search for program files.
  660.  
  661.  
  662.              Printing SNAP! Documentation
  663.  
  664.              SNAP! often produces a lot of documentation--perhaps more than
  665.              you will care to print.  It is not uncommon for SNAP! to
  666.              produce several hundred pages of documentation for a Dbase
  667.  
  668.  
  669.                                            11
  670.  
  671.  
  672.  
  673.  
  674.  
  675.  
  676.  
  677.              system of modest size.  It could take days to print it all out
  678.              on anything but a laser printer.
  679.  
  680.              I practically never print the documentation, but review it on
  681.              the screen instead.  However, if you decide to print the SNAP!
  682.              documentation files, you have several options.  First, you can
  683.              simply copy them to the printer like this:
  684.                COPY *.DOC PRN:
  685.  
  686.              A second option is to add the documentation files to the
  687.              REPRINT.DOC file (you have to add them with an editor--SNAP!
  688.              doesn't do it automatically) and use the "immediate print"
  689.              capabilities of SNAP! (Press "F9--Print Now" from the Print
  690.              Options Screen) to print them.
  691.  
  692.              Alternatively, you can use a program such as the LP program in
  693.              Norton Utilities to print the files.  LP (it may be called
  694.              LINEPRNT on your system) prints the files with nice headings
  695.              and page numbers.
  696.  
  697.              If you have a laser printer, I recommend that you take a look
  698.              at a Shareware program from Korenthal Associates called
  699.              4PRINT.  It prints four pages of text on each physical piece
  700.              of paper and can greatly reduce the volume of printed SNAP!
  701.              documentation.  
  702.  
  703.              I have gotten permission from Korenthal Associates to
  704.              distribute 4PRINT on the SNAP! distribution disk.  If you have
  705.              a laser printer, I encourage you to try 4PRINT.  If you use it
  706.              and like it, please register it directly to Korenthal
  707.              Associates at 230 West 13th Street, New York, New York 10011. 
  708.              Telephone: (212) 242-1790.  It is also available on many
  709.              bulletin board systems.  The registration fee for the full
  710.              package with printed documentation is about $40.  Highly
  711.              recommended.  When you register, please jot a note on the
  712.              form or tell them on the phone that you heard about it through 
  713.              SNAP!.
  714.  
  715.              You can also run SNAP!, create documentation and formatted
  716.              source code files, then later restart SNAP! and print the
  717.              source code.  Whenever you choose to create a list of files
  718.              used in the system (FILELIST.DOC), SNAP! also creates the
  719.              REPRINT.DOC file that can be used to reprint all SNAP! source
  720.              code and action diagram files.  Using the "F9--Print Now"
  721.              function on the print options screen, you can tell SNAP! to
  722.              print everything listed in REPRINT.DOC.  Should you decide to
  723.              print any files in addition to source code and action
  724.              diagrams, you can add their names to REPRINT.DOC.
  725.  
  726.              In addition to REPRINT.DOC, which holds the names of source
  727.              code files, SNAP! creates DOCLIST.DOC, which holds the names
  728.              of documentation files.  Should you wish to, you can use the
  729.  
  730.                                            12
  731.  
  732.  
  733.  
  734.  
  735.  
  736.  
  737.  
  738.              "F9--Print Now" option to print SNAP! documentation files. 
  739.              Even so, I recommend 4PRINT instead (see above).
  740.  
  741.              Using a Mouse
  742.  
  743.              SNAP! now supports mousing.  You can use the mouse to position
  744.              the cursor in data entry fields, select function keys and
  745.              navigate the help system.  To select one of the function keys
  746.              with the mouse, point at the function key definition on the
  747.              bottom of the screen. 
  748.  
  749.              In general, pressing the left button is like pressing the
  750.              enter key and pressing the right button is like pressing
  751.              escape.  For example, pressing the right button from a data
  752.              entry screen calls the main menu, just as if you had pressed
  753.              escape.
  754.  
  755.              There are a couple of wrinkles to using the mouse inside the
  756.              help system.  Clicking on the little diamond in the upper left
  757.              corner takes you to the previous help screen if there was one. 
  758.              Press the right mouse button to exit help.  If there is more
  759.              than one screen of help, you can click on the arrow on the
  760.              right side to scroll the page.
  761.  
  762.  
  763.  
  764.  
  765.  
  766.  
  767.  
  768.  
  769.  
  770.  
  771.  
  772.  
  773.  
  774.  
  775.  
  776.  
  777.  
  778.  
  779.  
  780.  
  781.  
  782.  
  783.  
  784.  
  785.  
  786.  
  787.  
  788.  
  789.  
  790.  
  791.                                            13
  792.  
  793.  
  794.  
  795.  
  796.  
  797.  
  798.  
  799.                                      SNAP! Commands
  800.  
  801.              SNAP! supports several commands that you can insert in your
  802.              source code files.  These commands will look like comments to
  803.              Dbase systems, but will have a special meaning for SNAP!.  The
  804.              commands allow you to define macros, insert imaginary program
  805.              statements into your system, turn SNAP! features on and off
  806.              for particular parts of your system, and so forth.
  807.  
  808.              Macros
  809.  
  810.              SNAP! has a limited ability to do macro substitutions.  To
  811.              define a macro, place the following line in your source code:
  812.  
  813.                   *# SNAPMACRO  source  target1 target2 . . .
  814.  
  815.              Alternatively, or in conjunction with this method, you can
  816.              also define macro substitutions in a separate file.  Specify
  817.              the /mfilename switch on the command line to tell SNAP! which
  818.              file the substitution strings are in.  For example, the
  819.              following command will start SNAP! and read macro definitions
  820.              from the file FOO.MAC:
  821.  
  822.                SNAP /mFOO.MAC
  823.  
  824.              If you do not specify a filename with the /m switch, SNAP!
  825.              will try to find MACRO.SNP. You must use the full "*#
  826.              SNAPMACRO" command verb on each line of the file.  Macro
  827.              substitutions defined in source code files take precedence
  828.              over those defined in a separate macro file.
  829.  
  830.              The /O switch on the SNAP! command line disables all macro
  831.              processing, both from SNAPMACRO statements in source code and
  832.              in a named macro file.
  833.  
  834.              Note that the SNAPMACRO statement begins with an asterisk and
  835.              a pound sign. SNAP! uses this sequence of characters to
  836.              designate a SNAP! command (see the /T command line switch for
  837.              information on how to change these characters). 'Source' must
  838.              be a single word, delimited by spaces or tabs.  "Target" means
  839.              the rest of the line.  Everything on the line--both source and
  840.              target--will be converted to upper case.
  841.  
  842.              Note that the source string does not include the ampersand (&)
  843.              symbol for the macro (e.g., use SOURCE instead of &SOURCE). 
  844.              The rest of the line (minus leading and trailing blanks) will
  845.              be used as a substitution string.  The target can be a single
  846.              word or several words.
  847.  
  848.              You cannot use && comments on a SNAPMACRO line since SNAP!
  849.              will think they are part of the target.  If you want to
  850.  
  851.  
  852.                                            14
  853.  
  854.  
  855.  
  856.  
  857.  
  858.  
  859.  
  860.              document the purpose of the SNAPMACRO statement, put a comment
  861.              on the line above it.
  862.  
  863.              The SNAPMACRO statement can appear anywhere, as long as SNAP!
  864.              sees it before encountering the macro that you want to
  865.              replace. If the target will have the same value throughout the
  866.              system (e.g., FOO will always be replaced by BAR), it is a
  867.              good idea to put all of the macros in one place, perhaps at
  868.              the top of the TopFile or in a separate macro file.
  869.  
  870.              If you would like SNAP! to use different macro values during
  871.              documentation, you may want to place the SNAPMACRO statement
  872.              immediately before the specific location of each macro
  873.              substitution.  If you have multiple definitions for a single
  874.              macro, only the last one SNAP! sees will be effective.  For
  875.              example, if the following series of statements are in your
  876.              program,
  877.  
  878.                *# SNAPMACRO s_ddndx  target1
  879.                *# SNAPMACRO s_ddndx  target2
  880.                *# SNAPMACRO s_ddndx  target3
  881.  
  882.              only 'target3' will be effective and will be substituted for
  883.              each occurrence of &s_ddndx.  See also the discussion of
  884.              SNAPCODE statements below for an alternative approach.
  885.  
  886.              SNAP! will try to remove macros that look like drive or path
  887.              designations.  For example, if the following statement is in
  888.              one of your programs:
  889.  
  890.                USE &MPATH.DATABASE
  891.  
  892.              SNAP! will detect the macro and remove it before trying to
  893.              find DATABASE.DBF.  One consequence of this limit is that you
  894.              cannot use macros to refer to program files in different
  895.              directories. All source code program files (programs, format
  896.              files, memory files, etc.) must reside in the single program
  897.              directory you specify in the System screen.  Databases and
  898.              indexes can be in either the program or data directories you
  899.              specify.
  900.  
  901.              SNAP! will not substitute the macro in the code itself, but
  902.              will use the substitution value everywhere else.  For example,
  903.              assume your program uses a database whose name is contained in
  904.              a macro variable named 'dataname'.  Assume further that you
  905.              have included the following line in your code:
  906.  
  907.                *# SNAPMACRO dataname ABC.DBF
  908.  
  909.              If your code has this line in it:
  910.  
  911.                USE &dataname
  912.  
  913.                                            15
  914.  
  915.  
  916.  
  917.  
  918.  
  919.  
  920.  
  921.  
  922.              the source code will be unchanged after running SNAP!, but the
  923.              program headings and all other SNAP! reports will show this
  924.              program using the ABC.DBF database.
  925.  
  926.              See also the section below "Fake Program Statements--SNAPCODE"
  927.              for other ideas on how to document macros.
  928.  
  929.  
  930.              Indirect References
  931.  
  932.              In many circumstances, Clipper allows you to specify filenames
  933.              and other strings as indirect references.  For example, the
  934.              following code is valid in Clipper Summer 87:
  935.                 foo = 'FILENAME'
  936.                 bar = '.TXT'
  937.                 SET PRINTER TO (foo+bar)
  938.              This is equivalent to the statement:
  939.                 SET PRINTER TO filename.txt
  940.  
  941.              SNAP! partially supports indirect references.  When SNAP! sees
  942.              one, it tries to apply macro substitution to the indirect
  943.              reference.  Therefore, the following code will document
  944.              properly:
  945.                 *# SNAPMACRO foo dbfname
  946.                 USE (foo)
  947.              SNAP! will pick up the reference to the "dbfname" database. 
  948.              However, more complicated indirect references will usually not
  949.              be picked up correctly.  For example, SNAP! will not be able
  950.              to figure out what is going on in the following code:
  951.                 dirname = 'CLIPPER'
  952.                 USE ('C:\'+ALLTRIM(dirname)+'\filename')
  953.              When SNAP! encounters such an indirect reference, it does not
  954.              include it in the documentation.  This limitation only applies
  955.              to Clipper systems, and only when you use indirect references. 
  956.              You can use SNAPCODE (see below) to force this database to be
  957.              documented.
  958.  
  959.  
  960.              SNAPCODE--Fake Program Statements
  961.  
  962.              Sometimes you may want to enter fake program source code
  963.              statements -- statements that SNAP! treats as real but which
  964.              do not actually interfere with your program when it executes. 
  965.              A good example is a macro that calls one of a number of
  966.              programs, depending on the value it has at run time (e.g., DO
  967.              &program). The macro substitution discussed in the section
  968.              above provides a way for you to specify one value for
  969.              'program'.  But suppose you wanted SNAP! to assume that
  970.              'program' had several values and to document each one in turn? 
  971.              The *# SNAPCODE directive provides a way.
  972.  
  973.  
  974.                                            16
  975.  
  976.  
  977.  
  978.  
  979.  
  980.  
  981.  
  982.              The *# SNAPCODE directive causes SNAP! to treat any text on
  983.              the line as if it were a program source code statement.  In
  984.              the example above, you could enter the following lines where
  985.              the macro was called:
  986.  
  987.                DO &program                    <---- in original program
  988.                *# SNAPCODE DO foo
  989.                *# SNAPCODE DO bar
  990.                *# SNAPCODE DO brlfq
  991.  
  992.              SNAP! acts as if these were perfectly straightforward calls to
  993.              'foo', 'bar' and 'brlfq', and documents them accordingly. 
  994.              dBASE and related systems ignore the statements.
  995.  
  996.              Note that SNAP! does not know that these SNAPCODE statements
  997.              have anything to do with the DO statement above.  SNAP! does
  998.              not associate 'foo' with 'program'.  The next time SNAP! sees
  999.              'DO &program' it will not assume that 'program' has the value
  1000.              'foo'. If you want SNAP! to associate values with macros, use
  1001.              the SNAPMACRO directive.
  1002.  
  1003.              As a side benefit, SNAPCODE statements help document your code
  1004.              by specifying the permissible values that particular macros
  1005.              can take.
  1006.  
  1007.  
  1008.              Program Narratives
  1009.  
  1010.              An important part of a well-documented system is a narrative
  1011.              explanation of the purpose of each program module. 
  1012.              Unfortunately, SNAP! can't figure this out on its on. 
  1013.              However, it does allow you to describe your programs, and it
  1014.              provides a way for your descriptions to be echoed to the
  1015.              HEADINGS.DOC file.  Any comments that start with "*)" will be
  1016.              interpreted as program narratives and will be sent to
  1017.              HEADINGS.DOC.  Naturally, these comments will also be left
  1018.              alone in the source code.  Normally you will want to put these
  1019.              narratives immediately below the SNAP! headings, but SNAP!
  1020.              will recognize them wherever they are.
  1021.  
  1022.  
  1023.              Other SNAP! Directives
  1024.  
  1025.              Other SNAP! commands, or directives, allow you to turn cross-
  1026.              referencing and program formatting on or off for particular
  1027.              programs.  For example, you may have "boilerplate" code that
  1028.              you have thoroughly debugged and formatted which you insert
  1029.              into many other systems.  It would be unnecessarily
  1030.              time-consuming to reformat this code every time you ran SNAP!. 
  1031.              SNAP! provides other commands to temporarily suspend
  1032.              cross-referencing and formatting-- XREF, FORMAT, INDENT,
  1033.              CAPITAL, and EXPAND.  Each of these commands accepts three
  1034.  
  1035.                                            17
  1036.  
  1037.  
  1038.  
  1039.  
  1040.  
  1041.  
  1042.  
  1043.              settings--ON, OFF and SUSPEND.  The ON and OFF commands are
  1044.              effective until SNAP! sees another directive, while SUSPEND is
  1045.              in effect only until the end of the current program or
  1046.              procedure.  For example, if you insert this line in your code:
  1047.                *# SNAP XREF OFF
  1048.              no tokens will be cross-referenced until this line is
  1049.              encountered:
  1050.                *# SNAP XREF ON
  1051.              On the other hand,
  1052.                *# SNAP XREF SUSPEND
  1053.              suspends cross-referencing only for the current file.  It
  1054.              starts up again when the next program or procedure is
  1055.              documented.
  1056.  
  1057.              I suspend cross-referencing for commonly-used subroutines in
  1058.              my code.  For example, since Clipper does not have a BROWSE
  1059.              command, I often include a public-domain BROWSE program in my
  1060.              systems. This is a standalone module that really has nothing
  1061.              to do with the rest of my system, and I don't want its
  1062.              variables cluttering up my cross-reference report.  So, I say:
  1063.                *# SNAP XREF SUSPEND
  1064.              at the top of the file and SNAP! leaves it alone.
  1065.  
  1066.              SNAP FORMAT works in the same way.  If format is off, no
  1067.              indenting or capitalization will be done.  When SNAP! sees a
  1068.              SNAP FORMAT statement, it affects the internal codes that
  1069.              determine whether indenting, capitalization and key word
  1070.              expansion (or contraction) take place.  The three commands
  1071.              (INDENT, CAPITAL and EXPAND) turn specific features on or off. 
  1072.              Thus, the following sequence suspends indenting and
  1073.              capitalization, but enables key word expansion:
  1074.                *# SNAP FORMAT SUSPEND
  1075.                *# SNAP CAPITAL ON
  1076.              Thus, FORMAT is a shorthand way of referring to CAPITAL,
  1077.              INDENT and EXPAND all at once.
  1078.  
  1079.              If *# is an inconvenient sequence for you (e.g, it may cause
  1080.              confusion with the British pound sign), you can change it with
  1081.              the /T switch on the command line.  For example, if you invoke
  1082.              SNAP! with the switch "/T*$", SNAP! will use *$ to designate
  1083.              SNAPMACRO, SNAPCODE and other SNAP! directives.  You must
  1084.              start this sequence with an asterisk (so that dBASE knows it
  1085.              is a comment) and it cannot be more than three characters
  1086.              long.
  1087.  
  1088.  
  1089.  
  1090.  
  1091.  
  1092.  
  1093.  
  1094.  
  1095.  
  1096.                                            18
  1097.  
  1098.  
  1099.  
  1100.  
  1101.  
  1102.  
  1103.  
  1104.                              Source Code Formatting Options
  1105.  
  1106.  
  1107.              File Headings
  1108.  
  1109.              One of the most useful SNAP! features is a heading written to
  1110.              each file in the system.  Each heading indicates:
  1111.  
  1112.                Program name
  1113.                System name
  1114.                Copyright notice
  1115.                Author
  1116.                Procedures defined within this file
  1117.                Which programs this program calls
  1118.                Which programs call this program
  1119.                Databases, index files, report forms, format files, label
  1120.                forms and memory files used by this program
  1121.                Date and time documented.
  1122.  
  1123.              A sample heading is included in the Appendix.   The sample
  1124.              heading indicates that TODOINP.PRG is called by TODOMENU,
  1125.              calls TIME and TESTDATE, uses a file whose name is contained
  1126.              in S_TDFILE with index TODO (macro substitution was not used
  1127.              for this example), and also uses the TODOINP format file.  The
  1128.              heading also indicates the system name, author, copyright and
  1129.              date documented.  You may want to add more information to the
  1130.              header, such as a brief narrative description of the program's
  1131.              purpose.
  1132.  
  1133.              If you choose to write headings on your source code files (or
  1134.              if you choose any other option that modifies the source code
  1135.              file), it is a good idea to send the output files to a
  1136.              different directory than the input files so that your original
  1137.              source code remains unchanged.
  1138.  
  1139.              If you choose to send output files to the input directory,
  1140.              your original source code file will be renamed with a .BAK
  1141.              extension. If you use extensions to distinguish between
  1142.              program files, some of your original source code files could
  1143.              be destroyed.  For example, if your system uses the following
  1144.              program file names:
  1145.  
  1146.                SYSTEM.INP
  1147.                SYSTEM.EDT
  1148.                SYSTEM.RPT
  1149.                SYSTEM.DEL
  1150.  
  1151.              and so on, the output files containing the headings will
  1152.              retain these names.  Each of the input files, however, will
  1153.              have been renamed to a file called SYSTEM.BAK, and only the
  1154.              last one will still exist when SNAP! completes.  Therefore,
  1155.  
  1156.  
  1157.                                            19
  1158.  
  1159.  
  1160.  
  1161.  
  1162.  
  1163.  
  1164.  
  1165.              you should always send output files to a separate subdirectory
  1166.              if you use this naming convention.
  1167.  
  1168.              As always, you should make regular backups, and you should be
  1169.              especially careful to make a full backup of all your files
  1170.              before running SNAP!.
  1171.  
  1172.              By default, SNAP! leaves the date and time of last update
  1173.              unchanged for each of your files.  You can instruct SNAP! to
  1174.              update the date and time last changed on the source code
  1175.              format screen.  The headings written to each program file show
  1176.              the date and time SNAP! was run.
  1177.  
  1178.  
  1179.              Indentation
  1180.  
  1181.              SNAP! can also help format your source code to make it easier
  1182.              to read.  SNAP! can recognize dBASE control structures and
  1183.              indent the program statements underneath them.  By default,
  1184.              indentation is three spaces.  (The author, who has long argued
  1185.              the superior virtue of tab characters for indenting code, has
  1186.              caved in to overwhelming user pressure on this point.  He
  1187.              still uses tabs in his code and believes you should too.  But
  1188.              the default is now three spaces.)  In addition, should you
  1189.              choose to use SNAP!'s source code printing routines, you can
  1190.              select the number of spaces to be inserted for each tab as the
  1191.              code prints.
  1192.  
  1193.              However, if you would like to use spaces rather than tab
  1194.              characters for indenting, you can select this option from the
  1195.              Format options screen.  For example, you can instruct SNAP! to
  1196.              use three spaces for each indentation level.  This option has
  1197.              no effect if you do not choose to indent source code.  It is
  1198.              different from the option in the source code printing facility
  1199.              that also allows you to expand tabs.  If you choose to use
  1200.              spaces to indent your source code files, the source code will
  1201.              not contain tabs, so the source code printing tab-expansion
  1202.              feature will have no effect.
  1203.  
  1204.              If you choose to indent source code or create action diagrams,
  1205.              SNAP! will also scan your code for mismatched control
  1206.              structure terminators.  For example, if your code has the
  1207.              following sequence:
  1208.  
  1209.  
  1210.  
  1211.  
  1212.  
  1213.  
  1214.  
  1215.  
  1216.  
  1217.  
  1218.                                            20
  1219.  
  1220.  
  1221.  
  1222.  
  1223.  
  1224.  
  1225.  
  1226.                DO WHILE T      statements
  1227.                .
  1228.                .
  1229.                .
  1230.                IF X = Y
  1231.                .
  1232.                .
  1233.                ENDIF
  1234.                ENDIF      <---- incorrect
  1235.  
  1236.              SNAP! will detect that the final statement should have been an
  1237.              ENDDO instead of an ENDIF and will display an appropriate
  1238.              error message.  SNAP! will accept 'END' as a valid
  1239.              abbreviation of ENDDO, ENDIF or ENDCASE.
  1240.  
  1241.              SNAP! does not track control structures across program or
  1242.              procedure boundaries.  Normally, this is not a problem since
  1243.              you cannot start a DO WHILE loop in one program and finish it
  1244.              in another.  BREAK statements, however, can exit from a
  1245.              BEGIN/END SEQUENCE control structure that is defined in
  1246.              another program. If SNAP! encounters a BREAK statement but
  1247.              cannot find the BEGIN/END SEQUENCE structure, it reports an
  1248.              error.  Just ignore it if you know that the BREAK is valid.
  1249.  
  1250.              Most people indent CASE statements in the following way, as
  1251.              God intended:
  1252.  
  1253.                DO CASE
  1254.                CASE foo = bar
  1255.                CASE xyzzy = plugh
  1256.                ENDCASE
  1257.  
  1258.              Certain stubborn users, however, who persist in the error of
  1259.              their ways in spite of my best efforts to point out their
  1260.              character flaws, insist on indenting CASE statements like
  1261.              this:
  1262.  
  1263.                DO CASE
  1264.                   CASE foo = bar
  1265.                   CASE xyzzy = plugh
  1266.                ENDCASE
  1267.  
  1268.              If you invoke SNAP! with the -A command line switch, you too
  1269.              can use this wretched technique.
  1270.  
  1271.  
  1272.              Capitalization
  1273.  
  1274.              SNAP! will also capitalize dBASE key words found in your
  1275.              source code.  Key words are stored in a file called
  1276.              DBxWORDS.SNP where x is a 2, 3 or 4 depending on the version
  1277.              of dBASE you are using (you can also specify another file). 
  1278.  
  1279.                                            21
  1280.  
  1281.  
  1282.  
  1283.  
  1284.  
  1285.  
  1286.  
  1287.              SNAP! does not attempt to parse code statements to determine
  1288.              how a word is used, so if you use key words as variable or
  1289.              field names, they will also be capitalized.  Should you wish
  1290.              not to capitalize a particular key word, you can either delete
  1291.              it from the DBxWORDS.SNP file, or "comment it out" by putting
  1292.              an asterisk before it in the file (e.g., RELEASE becomes
  1293.              *RELEASE).
  1294.  
  1295.              The preceding paragraph assumes you prefer "standard"
  1296.              capitalization--key words are capitalized, functions have an
  1297.              initial capital letter, and everything else is in lower case. 
  1298.              If not, you can change it on the Format screen.  You can
  1299.              select upper case, lower case, initial caps, or none (leave it
  1300.              alone) for both tokens and for key words.  Thus, if you were
  1301.              so inclined, you could capitalize tokens (variables, etc.) and
  1302.              lowercase key words.
  1303.  
  1304.  
  1305.              Key Word Expansion and Compression
  1306.  
  1307.              SNAP! will allow you to expand abbreviated key words to their
  1308.              full length, or to abbreviate the key words to four
  1309.              characters. Compilers don't care about any of this, but the
  1310.              dBASE interpreter runs programs slightly, usually very
  1311.              slightly, faster if the key words are abbreviated to their
  1312.              first four characters.  An option on the Format screen
  1313.              controls how expansion or compression is done.  The default is
  1314.              no expansion or compression--SNAP! leaves your code alone. 
  1315.              However, you can select expansion, or compression to any
  1316.              number of characters between 4 and 9.
  1317.  
  1318.              Please be careful with this option, especially if you are not
  1319.              very careful about how you name variables.  The only thing
  1320.              SNAP! knows about key words are that they are in the key words
  1321.              file. If one of your variables is a key word (or a valid
  1322.              abbreviation of a key word), SNAP! will cheerfully expand or
  1323.              contract it along with everything else.  SNAP! cannot tell how
  1324.              whether a particular word is being used as a command or as a
  1325.              variable.  Normally, this will not be a big problem--if you
  1326.              named a variable "title" and compressed key words, it will now
  1327.              be called "titl".  Problems could arise, however, if two
  1328.              variables are valid abbreviations of the same key word (e.g.,
  1329.              "other" and "otherw", both of which are valid abbreviations of
  1330.              OTHERWISE).  If you compress key words and have such variable
  1331.              names, both variables will be compressed to OTHE, and there is
  1332.              no way to separate them again.  Also, if you are using a
  1333.              dialect of Dbase that supports user-defined functions (UDFs),
  1334.              and if one of the UDFs has the same name as a key word (Tom
  1335.              Rettig's BLANK() function, for example), the UDF name will be
  1336.              compressed (assuming the UDF name was in the key words file).
  1337.              If you compress keywords in this case, nothing desirable will
  1338.              happen.
  1339.  
  1340.                                            22
  1341.  
  1342.  
  1343.  
  1344.  
  1345.  
  1346.  
  1347.  
  1348.  
  1349.              Because of the irrevocable changes that this option can make,
  1350.              SNAP! will not allow you to exercise it if the source and
  1351.              output directories are the same.  In other words, SNAP! will
  1352.              refuse to overwrite your original source code files if you
  1353.              select this option.  Big brother is looking out for you.
  1354.  
  1355.              If you use the compression option, please run the compressed
  1356.              code and ensure that it works before you delete the backups
  1357.              that SNAP! made.
  1358.  
  1359.              Key words that are identified in the key words file as
  1360.              functions (they have () after their name--see below) are never
  1361.              affected by key word compression or expansion.
  1362.  
  1363.  
  1364.              Suppressing Blank Lines and Comments
  1365.  
  1366.              You can suppress blank lines and/or comments from the output
  1367.              files by selecting the appropriate options on the Format
  1368.              screen. I do not recommend this, but it does make interpreted
  1369.              Dbase applications run slightly faster.  Please be doubly sure
  1370.              to make backups before doing this.  SNAP!'s default options
  1371.              are to leave both blank lines and comments in the output file,
  1372.              so you have to take special action yourself before they will
  1373.              be dropped.
  1374.  
  1375.              As with key word expansion and compression, you cannot select
  1376.              this option if the source and output subdirectories are the
  1377.              same.
  1378.  
  1379.              If you know how to design an effective counterpart to this
  1380.              feature--how to put the comments back in--please contact me
  1381.              about a potentially lucrative commercial venture.
  1382.  
  1383.  
  1384.              Key Words File
  1385.  
  1386.              Capitalization, cross-referencing and key word expansion and
  1387.              compression are controlled by the words in the key words file.
  1388.              The key word file should contain one key word per line.
  1389.              Capitalization and order do not matter, except that if two
  1390.              identical key words have different flags (see below), the last
  1391.              one takes precedence.
  1392.  
  1393.              By inserting the correct characters in the key word file, you
  1394.              can cause certain key words or variables to be handled
  1395.              differently than normal.  The following characters have a
  1396.              special meaning in the key word file when inserted immediately
  1397.              before a word:
  1398.  
  1399.  
  1400.  
  1401.                                            23
  1402.  
  1403.  
  1404.  
  1405.  
  1406.  
  1407.  
  1408.  
  1409.                *  Comments out the word.  SNAP! acts as if it were not in
  1410.                   the key word file at all.
  1411.  
  1412.                !  Capitalize, but do no cross-reference even when the
  1413.                   option to cross-reference key words is in effect.  You
  1414.                   may want to use this character for often-used but
  1415.                   uninteresting key words such as TO or, perhaps, SAY.
  1416.  
  1417.                @  Capitalize and always cross-reference this word, even
  1418.                   when the option to cross-reference key words is not in
  1419.                   effect.  You might want to use this for especially
  1420.                   important key words such REPLACE, SAVE, or QUIT.
  1421.  
  1422.                %  Neither capitalize nor cross-reference, regardless of
  1423.                   whether the options to capitalize or cross-reference key
  1424.                   words are in effect. You may want to use this character
  1425.                   for variables that you use frequently, but that you are
  1426.                   not interested in cross-referencing--perhaps "i",
  1427.                   "choice", "action", or "lineno".  This will keep them
  1428.                   from cluttering up the cross-reference report.  Such
  1429.                   words are not affected by key word expansion or
  1430.                   contraction.
  1431.  
  1432.                () If the *last* two characters in a key word are (), the
  1433.                   key word will ordinarily have an initial capital letter
  1434.                   in the formatted output.  The DB3WORDS.SNP file that
  1435.                   comes with SNAP! uses this notation to designate the Tom
  1436.                   Rettig key words (Tom Rettig is the author of a popular
  1437.                   set of functions for dBASE III and Clipper) and the
  1438.                   keywords in the PROCLIP3 library.  Functions are never
  1439.                   affected by key word expansion or contraction.
  1440.  
  1441.              The following examples illustrate how to use these special
  1442.              characters:
  1443.  
  1444.                *note
  1445.                !SAY
  1446.                @REPLACE
  1447.                %CHOICE
  1448.                SOME_FUNCTION()
  1449.  
  1450.              There are two ways to tell SNAP! about key words.  First, the
  1451.              Format screen allows you to specify the main key words file,
  1452.              which will usually be DB4WORDS.SNP for FoxPro or dBASE IV
  1453.              systems, DB3WORDS.SNP for Clipper, dBASE III and FoxBASE+, and
  1454.              DB2WORDS.SNP for any wretches still using dBASE II.  In
  1455.              addition, SNAP! will look for a file called PERSONAL.KEY in
  1456.              the SNAP! subdirectory (the subdirectory where you put SNAP!--
  1457.              it doesn't actually have to be named "SNAP!").  Anything found
  1458.              in PERSONAL.KEY will be treated just as if it were in, say,
  1459.              DB4WORDS.SNP.  Therefore, you can customize your key words
  1460.  
  1461.  
  1462.                                            24
  1463.  
  1464.  
  1465.  
  1466.  
  1467.  
  1468.  
  1469.  
  1470.              list without messing up the factory-installed DB4WORDS.SNP
  1471.              file.
  1472.  
  1473.              SNAP! is distributed with key words files for a variety of
  1474.              third-party function libraries.  Naturally, different
  1475.              programmers will use different libraries.  If you use one of
  1476.              the supported libraries, just include its key words into the
  1477.              main SNAP! key words file (e.g., DB4WORDS.SNP) or into your
  1478.              PERSONAL.KEY file.  The best way to add a library's key words
  1479.              is to put "*# INCLUDE" statements like this in your
  1480.              PERSONAL.KEY file or into DB4WORDS.SNP:
  1481.                 *# INCLUDE rettig.key
  1482.                 *# INCLUDE proclip.key
  1483.              SNAP! will then recognize all the key words in RETTIG.KEY. 
  1484.              These "*# INCLUDE statements" can be nested, but they have to
  1485.              be in either the main key words file or in PERSONAL.KEY.  A
  1486.              "*# INCLUDE" statement in a source code file is ignored.  In
  1487.              addition to using "*# INCLUDE" statements, you can use a word
  1488.              processor or program editor to move the words into
  1489.              PERSONAL.KEY or DB4WORDS.SNP.
  1490.  
  1491.              "Support" for third-party libraries is really just a list of
  1492.              key words.  You can easily add key words from any other
  1493.              library that I didn't include--SNAP! itself doesn't have to be
  1494.              modified.
  1495.  
  1496.              SNAP! provides enough space for a maximum of 1,500 key words. 
  1497.              This is far more than is required for all dialects of Dbase
  1498.              put together, but is not enough for all of the third-party
  1499.              libraries also.  Therefore, you should just update the main
  1500.              key words file for the libraries you actually use.  Any key
  1501.              words past the limit will be ignored.  
  1502.  
  1503.              SNAP! does not try to detect duplicate key words.  They don't
  1504.              cause any harm, but they all count against the limit.  If you
  1505.              have duplicate key words with different control characters
  1506.              (see above), the control character set that will be used by
  1507.              SNAP! is deterministic but unpredictable. 
  1508.  
  1509.  
  1510.  
  1511.  
  1512.  
  1513.  
  1514.  
  1515.  
  1516.  
  1517.  
  1518.  
  1519.  
  1520.  
  1521.  
  1522.  
  1523.                                            25
  1524.  
  1525.  
  1526.  
  1527.  
  1528.  
  1529.  
  1530.  
  1531.                                   Reports and Outputs
  1532.  
  1533.              SNAP! can produce any combination of several reports.  Each
  1534.              report is optional and can be selected or suppressed on the
  1535.              Options Screen. However, some reports (e.g. Data dictionary,
  1536.              Index summary) require you to search the tree rather than
  1537.              document a single program.
  1538.  
  1539.              Normally, SNAP! tells you that it is producing a particular
  1540.              report, but does not display the report on the screen. 
  1541.              However, each report other than a file heading, may be
  1542.              displayed on the screen as it is echoed to a file.  You can
  1543.              enable screen echoing by invoking SNAP! with the /S command
  1544.              line parameter.  I like to see the reports being generated but
  1545.              some people prefer to silence the screen to improve SNAP!'s
  1546.              speed.  Note that the /S switch only affects the screen
  1547.              display of reports and has no effect on the status screens
  1548.              that are displayed as SNAP! scans source code files.
  1549.  
  1550.              The program contains default filenames (e.g., XREF.DOC for the
  1551.              cross-reference report), but you can change them if you wish.
  1552.  
  1553.  
  1554.              Controlling the Printer
  1555.  
  1556.              SNAP! allows you to specify a number of parameters for
  1557.              controlling your printer.  These parameters include margins,
  1558.              setup strings, and so forth.  In addition to entering them
  1559.              directly, you can also press F2 and select some standard
  1560.              printer configurations from a scrollable list.  These printer
  1561.              definitions are stored in the SNAPPRT.SNP file, an ASCII file
  1562.              which you can edit yourself to add more printer definitions. 
  1563.              SNAP! supports up to 10 printer definitions.
  1564.  
  1565.  
  1566.              System Summary
  1567.  
  1568.              This report shows the following information:
  1569.                System name
  1570.                Author
  1571.                Current date and time
  1572.                Lines of code
  1573.                Number of programs, procedures, procedure files, indexes,
  1574.                and so forth 
  1575.                Names of databases, indexes, report forms, label forms and
  1576.                memory files
  1577.  
  1578.              The system summary would ordinarily be the first page in the
  1579.              documentation.  It, together with the tree diagram, provides a
  1580.              basic overview of the entire system.  See Appendix A for an
  1581.              example.
  1582.  
  1583.  
  1584.                                            26
  1585.  
  1586.  
  1587.  
  1588.  
  1589.  
  1590.  
  1591.  
  1592.              Tree Structure Diagram
  1593.  
  1594.              If you choose the default option of documenting all programs
  1595.              in the tree, SNAP! will produce a chart showing which programs
  1596.              call which other programs and which programs use which
  1597.              databases.  The tree diagram, like other SNAP! reports,
  1598.              appears on the screen and is echoed to a file (default name of
  1599.              TREE.DOC).
  1600.  
  1601.              Any procedures or databases in the tree will be designated
  1602.              like this:
  1603.                Gee (procedure in procedure.file)
  1604.                Whiz (database ALIAS baz)
  1605.  
  1606.              SNAP! by default includes programs, procedures, functions,
  1607.              format files and databases in the tree. The Tree Screen
  1608.              includes options that allow you to put indexes, report forms,
  1609.              label forms and memory files in the tree also, or to suppress
  1610.              any of the default file types except program files.
  1611.  
  1612.              Note that the databases (and other non-program files) are
  1613.              shown underneath the programs that actually call them.  If a
  1614.              database is opened in one program and remains open in another
  1615.              program, SNAP! will show the database as called only by the
  1616.              first program file.
  1617.  
  1618.              SNAP! has some code to detect certain types of recursion and
  1619.              prevent the tree from marching off the right side of the page
  1620.              and eventually off the end of the world.  SNAP! catches
  1621.              programs that call themselves and programs that call another
  1622.              program that calls the original program again.  If the
  1623.              recursion is more subtle than that, SNAP! will eventually give
  1624.              up when recursion reaches 25 levels.  You will have become
  1625.              bored watching the display by that point.
  1626.  
  1627.              SNAP! detects calls to other programs, procedures and
  1628.              functions when they are in one of the following formats: 
  1629.                DO something
  1630.                SET KEY 300 TO something
  1631.                ON KEY 300 DO something
  1632.                ON KEY=300 DO something
  1633.                ON KEY DO something
  1634.                ON KEY LABEL keylabel DO something
  1635.                ON ESCAPE [or ERROR] DO something
  1636.                ON READERROR DO something
  1637.                ON SELECTION PAD ... DO something
  1638.                ON SELECTION POPUP ... DO something
  1639.                ON PAGE x AT LINE y DO something
  1640.                foo = something()    <---SNAP! detects other UDF calls also 
  1641.                CHAIN something
  1642.                SWITCH something
  1643.                SET FORMAT TO something
  1644.  
  1645.                                            27
  1646.  
  1647.  
  1648.  
  1649.  
  1650.  
  1651.  
  1652.  
  1653.  
  1654.              Further, SNAP! detects calls to user defined functions in
  1655.              certain Clipper functions--MEMOEDIT, DBEDIT and ACHOICE.
  1656.  
  1657.              SNAP! searches through procedure files to generate a complete
  1658.              list of procedures and functions.  It identifies procedure
  1659.              files in the following ways:
  1660.                EXTERNAL procfile
  1661.                SET PROCEDURE TO procfile
  1662.                SET UDF TO procfile
  1663.              Also, SNAP! will detect any procedures that are tacked on to
  1664.              the bottom of a PRG file, a coding style that Clipper allows.
  1665.  
  1666.              There are other "things" that sometimes act like programs. 
  1667.              For example, dBASE IV creates an FRG file whenever you use its
  1668.              report writer.  In reality, this file is a procedure file that
  1669.              contains code to produce the report.  SNAP! detects that an
  1670.              FRG file exists and shows it begin called from the program
  1671.              that initiates the report--the one that contains the REPORT
  1672.              FORM ... TO ... statement.  Similarly, label LBG files are
  1673.              also detected and documented.
  1674.  
  1675.              The tree report is illustrated in the Appendix.
  1676.  
  1677.  
  1678.              File List
  1679.  
  1680.              SNAP! can write a simple list of all files used in the system,
  1681.              including programs, databases, index files, and so on.  This
  1682.              report can be useful for identifying which files in a
  1683.              directory are associated with an application.  The file list
  1684.              can also be fed into the source code printing routines at a
  1685.              later point, so that the program files can be printed without
  1686.              going through a time-consuming complete documentation run
  1687.              again. 
  1688.  
  1689.              Data Dictionary
  1690.  
  1691.              The data dictionary report contains two parts: 1) the database
  1692.              structure for each database in the system and a list of
  1693.              programs which use it; and 2) a listing of each data field in
  1694.              the system and the databases that contain it.
  1695.  
  1696.              SNAP! tries to figure out which indexes, report forms and
  1697.              label forms are associated with each database.  It tracks the
  1698.              following statements:
  1699.                USE dbfname
  1700.                SELECT A (or B, C, etc. up through J)
  1701.                SELECT aliasname
  1702.                CLOSE DATABASES
  1703.                CLOSE ALL
  1704.                USE
  1705.  
  1706.                                            28
  1707.  
  1708.  
  1709.  
  1710.  
  1711.  
  1712.  
  1713.  
  1714.              SNAP! knows how to account for macros in each of these
  1715.              constructions, assuming you have defined the macro.  For
  1716.              example, USE &temp will be interpreted to mean USE abcfile if
  1717.              you have previously defined &temp to mean abcfile (see section
  1718.              on SNAPMACRO statements for more details).
  1719.  
  1720.              SNAP! is reasonably good, but certainly not perfect, at
  1721.              figuring out which database is active at a particular spot in
  1722.              the code. There are, however, some limitations you should be
  1723.              aware of. First, SNAP! does not track databases or areas
  1724.              across program files or procedures.  Whenever SNAP! begins
  1725.              documenting a file, it assumes that no databases are in use
  1726.              and that area A is active.  Also, SNAP! does not try to
  1727.              interpret conditional structures.  For example, consider the
  1728.              following code: 
  1729.                 IF .T.
  1730.                   USE foo
  1731.                ELSE
  1732.                   USE bar
  1733.                ENDIF
  1734.  
  1735.              SNAP! looks at this code one line at a time.  The last USE
  1736.              statement it sees is 'USE bar'.  That statement will never
  1737.              actually be executed (because of the IF test), but SNAP!
  1738.              doesn't know that.  You may need to use SNAPCODE statements to
  1739.              help SNAP! figure out what is happening in cases such as this
  1740.              one.
  1741.  
  1742.              SNAP! identifies databases in these ways:
  1743.  
  1744.                1) USE statements, but only those followed by a database
  1745.                   name;
  1746.                2) COPY TO statements, including COPY TO ... SDF.  If the
  1747.                   command copies to an SDF file that does not have an
  1748.                   explicit extension, SNAP! supplies .TXT. Otherwise SNAP!
  1749.                   assumes databases to have .DBF extensions.
  1750.                3) DELETE FILE xxx.DBF
  1751.                4) CREATE foo FROM bar    (SNAP! picks up both foo and bar)
  1752.                5) CREATE foo
  1753.                6) COPY FILE foo.dbf TO bar.dbf
  1754.                7) COPY STRUCTURE [EXTENDED] TO foo
  1755.                8) SORT ON keyname TO foo
  1756.  
  1757.              A statement that tests for the existence of a database (e.g.
  1758.              IF FILE("xyz")) will not by itself be identified as a database
  1759.              reference.  Currently, SNAP! imposes an overall limit of 1,024
  1760.              fields in the entire system.  If you exceed that number, SNAP!
  1761.              complains and does not include the excess fields in the data
  1762.              dictionary.
  1763.  
  1764.              A sample data dictionary report is included in appendix A.
  1765.  
  1766.  
  1767.                                            29
  1768.  
  1769.  
  1770.  
  1771.  
  1772.  
  1773.  
  1774.  
  1775.  
  1776.              Index File Summary
  1777.  
  1778.              The index file summary lists each index file referenced in the
  1779.              system and attempts to show the fields it is indexed on and
  1780.              the files that use it.  It also shows multiple index files and
  1781.              their tags in a separate section of the report. 
  1782.  
  1783.              SNAP! first checks for an index file with the default
  1784.              extension you specified on the "Other Options" screen. If it
  1785.              cannot find a file with that extension, it tries to find one
  1786.              with an extension of NDX (the usual extension of dBASE II,
  1787.              dBASE III index files).  If it cannot find this file, it tries
  1788.              to find the same file name with an NTX extension (the usual
  1789.              extension of Clipper index files).  Failing that, it tries
  1790.              FoxBASE+/FoxPro IDX extensions.  If SNAP! cannot find one of
  1791.              those either, it gives up and reports that the NDX file could
  1792.              not be found.  If, however, it could find the Clipper or
  1793.              FoxBASE+/FoxPro file, it documents it appropriately.
  1794.  
  1795.              SNAP! also shows the database associated with each index, if
  1796.              it could figure it out.  The data dictionary section of this
  1797.              documentation discusses the assumptions that SNAP! makes about
  1798.              which database is active.
  1799.  
  1800.              SNAP! identifies indexes in five ways:
  1801.  
  1802.                1) INDEX ON xyz TO indexfile
  1803.                2) USE xyz INDEX indexfile1,indexfile2,indexfile3 ...
  1804.                3) SET INDEX TO indexfile1,indexfile2,indexfile3 ... 
  1805.                4) DELETE FILE xyz.NDX
  1806.                5) COPY FILE foo.ndx TO bar.ndx
  1807.  
  1808.              In cases 2 and 3, each index file will be separately
  1809.              identified and documented.
  1810.  
  1811.              A statement that tests for the existence of an index (e.g. IF
  1812.              FILE("xyz.NDX")) will not by itself be identified as an index
  1813.              reference.
  1814.  
  1815.              SNAP! identifies multiple index files (MDX files) in the
  1816.              following ways:
  1817.                1) INDEX ON bar TAG foo OF xyz
  1818.                2) USE xyz  (when XYZ.MDX exists)
  1819.                3) SET INDEX TO xyz
  1820.                4) COPY TAG foo OF xyz TO ndxname
  1821.  
  1822.              A sample index file summary in shown in the Appendix.
  1823.  
  1824.  
  1825.  
  1826.  
  1827.  
  1828.                                            30
  1829.  
  1830.  
  1831.  
  1832.  
  1833.  
  1834.  
  1835.  
  1836.              Format File Summary
  1837.  
  1838.              SNAP! also produces a report showing each format file used in
  1839.              the system and the programs that call it.  A sample report is
  1840.              in the Appendix.
  1841.  
  1842.              SNAP! identifies format files in two ways:
  1843.  
  1844.                1) SET FORMAT TO xyz
  1845.                2) DELETE FILE xyz.FMT
  1846.  
  1847.              In case 1, if this is a dBASE II system, SET FORMAT TO SCREEN
  1848.              and SET FORMAT TO PRINT are not flagged as references to
  1849.              format files.
  1850.  
  1851.              A statement that tests for the existence of an format (e.g. IF
  1852.              FILE("xyz.FMT")) will not by itself be identified as an format
  1853.              reference.
  1854.  
  1855.  
  1856.              Report Form Summary
  1857.  
  1858.              SNAP! also produces a report showing each report form used in
  1859.              the system, the report parameters, and the programs that call
  1860.              it. For dBASE III, FoxBASE+ and Clipper systems, SNAP! shows a
  1861.              mock- up of each report and the expressions that go into each
  1862.              column. It also indicates which database is associated with
  1863.              the report form.
  1864.  
  1865.              Documentation for dBASE IV and FoxPro report formats is
  1866.              simpler and does not include a mock-up of the report. 
  1867.              Documentation for both dBASE IV and FoxPro shows the fields or
  1868.              expressions that comprise the detail records.  Since both
  1869.              systems contain very sophisticated and elaborate report
  1870.              generators, it is not practical to summarize how the report
  1871.              looks, so SNAP! focuses on its contents.  You may wish to take
  1872.              a screen print of the report generator as additional
  1873.              documentation.  Also, apart from the documentation that SNAP!
  1874.              automatically produces, you may wish to retain a sample report
  1875.              printout.  Such a sample is probably a better indication of
  1876.              what the report does than the SNAP! documentation.
  1877.  
  1878.              A sample dBASE III report is in the Appendix.
  1879.  
  1880.              SNAP! identifies report forms in two ways:
  1881.  
  1882.                1)   REPORT FORM xyz ...
  1883.                2)   DELETE FILE xyz.FRM
  1884.  
  1885.              A statement that tests for the existence of an form (e.g. IF
  1886.              FILE("xyz.FRM")) will not by itself be identified as an report
  1887.              form reference.
  1888.  
  1889.                                            31
  1890.  
  1891.  
  1892.  
  1893.  
  1894.  
  1895.  
  1896.  
  1897.  
  1898.  
  1899.              Label Form Summary
  1900.  
  1901.              The label form summary shows the parameters of each label form
  1902.              in the system.  It also indicates which database is associated
  1903.              with each label form.  A sample report is in the Appendix.
  1904.  
  1905.  
  1906.              Procedure File Summary
  1907.  
  1908.              SNAP! allows you to prepare a summary of files that contain
  1909.              procedures (see example in appendix A).  This summary shows
  1910.              the procedures in each procedure file and the programs and
  1911.              procedures that each one calls and is called by.  The report
  1912.              shows each procedure and function in the TopFile system. 
  1913.              SNAP! also reports the parameters expected by any procedures
  1914.              or functions that accept parameters.  Note that this report
  1915.              covers both procedure files and ordinary program files that
  1916.              also contain procedures (as Clipper allows).
  1917.  
  1918.  
  1919.              Other Summary Reports
  1920.  
  1921.              SNAP! also produces summary reports for the following
  1922.              additional file types:
  1923.                1) Memory files
  1924.                2) Binary (LOAD/CALL) files
  1925.                3) Other files
  1926.  
  1927.              Other files are generally text files that are specified in the
  1928.              following ways:
  1929.                1) SET ALTERNATE TO xyz
  1930.                2) SET PRINTER TO xyz
  1931.                3) COPY MEMO to xyz
  1932.                4) APPEND MEMO FROM xyz
  1933.                5) COPY FILE xyz TO abc   <-- when SNAP! doesn't recognize
  1934.                                              the file extension
  1935.                6) TYPE xyz
  1936.  
  1937.              The other files summary report lists these files and shows
  1938.              which programs or procedures made a reference to the file.  I
  1939.              don't guarantee that the report will pick up every possible
  1940.              "other" file, but it seems to catch all of them in the sample
  1941.              code I use to test it.
  1942.  
  1943.  
  1944.              Variable Cross-Reference Report
  1945.  
  1946.              Another useful report available through SNAP! is a variable
  1947.              cross-reference listing, showing line numbers for each program
  1948.              that references a particular variable.  'Variable' in this
  1949.  
  1950.                                            32
  1951.  
  1952.  
  1953.  
  1954.  
  1955.  
  1956.  
  1957.  
  1958.              context includes field names, file names and anything else
  1959.              that isn't a key word, numeric constant, punctuation mark or
  1960.              quoted string.
  1961.  
  1962.              If you elect to display the variable cross-reference report
  1963.              (by responding 'Y' to the question on the options menu), you
  1964.              can view the Cross-reference Options Screen.  The
  1965.              Cross-reference Options Screen allows you to select the type
  1966.              of "things" that will included on the cross-reference report. 
  1967.              You will have the option to include only PUBLIC variables
  1968.              (this option has no meaning if this is a dBASE II system). 
  1969.              You also get the following choices:
  1970.  
  1971.                Include other variables and tokens
  1972.                Include key words
  1973.                Include numeric constants
  1974.  
  1975.              Your responses to these prompts (and your use of special
  1976.              characters in the key words file--see below) determine which
  1977.              words will appear on the cross-reference report.
  1978.  
  1979.              The cross-reference report adds certain codes to the end of a
  1980.              line number reference when the reference is particularly
  1981.              interesting.  SNAP! looks for the following statements to tell
  1982.              if a variable or field name (assume its name is 'abc') is
  1983.              interesting:
  1984.  
  1985.                Reference Type                                   Report Flag
  1986.  
  1987.                abc = 4                                                 * 
  1988.                STORE 4 TO abc                                          * 
  1989.                WAIT to abc                                             * 
  1990.                @ 1,1 GET abc PICTURE "blah, blah"                      G 
  1991.                ACCEPT "something" TO abc                               G 
  1992.                INPUT abc                                               G 
  1993.                REPLACE abc WITH something                              R 
  1994.                RELEASE abc                                             x 
  1995.                PUBLIC abc                                              P 
  1996.                PRIVATE abc                                             V 
  1997.                &abc                                                    & 
  1998.                DECLARE abc[100]                                        A 
  1999.                DIMENSION abc(100,200)                                  A 
  2000.                USE abc [INDEX ...] [ALIAS ...]                         U 
  2001.                DO foo WITH @abc                                        @
  2002.  
  2003.              As the following sample excerpt from the cross reference
  2004.              report illustrates, you can tell at a glance what is happening
  2005.              to the variables you are using:
  2006.  
  2007.              ABC
  2008.                TODO.PRG         30P   41    42    43G   44    45*   46G 47G
  2009.                TDINPUT.PRG     123V  234*  235   237
  2010.  
  2011.                                            33
  2012.  
  2013.  
  2014.  
  2015.  
  2016.  
  2017.  
  2018.  
  2019.                SETFILT.PRG      16    24    28    32
  2020.                TDEDIT.PRG      107*  133   134   135   136   138x
  2021.  
  2022.              This report shows that variable 'abc' was used in four
  2023.              programs (TODO, TDINPUT, SETFILT and TDEDIT).  Within TODO, it
  2024.              was declared a PUBLIC variable on line 30; referenced but not
  2025.              changed on lines 41, 42 and 44; used in a GET statement on
  2026.              lines 43, 46 and 47; modified in line 45; and released on line
  2027.              72.  TDINPUT declared it to be PRIVATE (line 123), assigned it
  2028.              a value in line 234, then referred to it in lines 235 and 237.
  2029.  
  2030.              A legend to explain all these flags is printed at the top of
  2031.              each cross-reference report, so you do not need to remember
  2032.              what they all mean.
  2033.  
  2034.              SNAP! will not flag a 'RELEASE ALL' statement as a reference,
  2035.              nor will it figure out that a 'RESTORE FROM xyz.mem' may
  2036.              overwrite other variables.  Neither of these statements will
  2037.              generate a cross-reference listing for any variables (though
  2038.              xyz.mem will be referenced).  Of course, you can have SNAP!
  2039.              cross-reference the RELEASE and RESTORE statements themselves.
  2040.  
  2041.              By default, references to a database field prefaced by the
  2042.              alias (e.g., foo->bar) will be shown as one token in the cross
  2043.              reference file.  If you do not like this convention, the /C
  2044.              command line option turns it off, so that foo and bar will be
  2045.              referenced separately.
  2046.  
  2047.              At the bottom of the report, SNAP! produces a list of public
  2048.              variables, a list of macros and a list of arrays.  The macro
  2049.              list is subdivided into macros that you defined to SNAP! and
  2050.              those you didn't.  If you defined a macro, its definition is
  2051.              also shown.
  2052.  
  2053.              The cross-reference report interacts closely with the key word
  2054.              file.  Specifically, the key word file is how SNAP! can tell
  2055.              what is a key word and what is not.  Additionally, by
  2056.              inserting the correct characters in the key word file, you can
  2057.              cause certain key words or variables to be handled differently
  2058.              than usual.  The following characters have a special meaning
  2059.              in the key word file when inserted immediately before a word:
  2060.  
  2061.                *  Comments out the word.  SNAP! acts as if it were not in
  2062.                   the key word file at all.
  2063.  
  2064.                !  Capitalize, but do no cross-reference even when the
  2065.                   option to cross-reference key words is in effect.  You
  2066.                   may want to use this character for often-used but
  2067.                   uninteresting key words such as TO or, perhaps, SAY.
  2068.  
  2069.                @  Capitalize and always cross-reference this word, even
  2070.                   when the option to cross-reference key words is not in
  2071.  
  2072.                                            34
  2073.  
  2074.  
  2075.  
  2076.  
  2077.  
  2078.  
  2079.  
  2080.                   effect.  You might want to use this for especially
  2081.                   important key words such REPLACE, SAVE, or QUIT.
  2082.  
  2083.                %  Neither capitalize nor cross-reference, regardless of
  2084.                   whether the options to capitalize or cross-reference key
  2085.                   words are in effect.  You may want to use this character
  2086.                   to designate variables that you use frequently, but that
  2087.                   you are not interested in cross-referencing--perhaps "i",
  2088.                   "choice", "action", or "lineno".
  2089.  
  2090.                () If the *last* two characters in a key word are (), the
  2091.                   key word will ordinarily have an initial capital letter
  2092.                   in the formatted output.  The DB3WORDS.SNP file that
  2093.                   comes with SNAP! uses this notation to designate the Tom
  2094.                   Rettig key words (Tom Rettig is the author of a popular
  2095.                   set of functions for dBASE III and Clipper).
  2096.  
  2097.              The following examples illustrate how to use these special
  2098.              characters:
  2099.  
  2100.                *note      --  This word will be ignored.
  2101.                !SAY       --  Capitalize, but do not cross-reference, SAY.
  2102.                @REPLACE   --  Include REPLACE in the cross-reference
  2103.                               report.
  2104.                %CHOICE    --  Do not capitalize or cross-reference this
  2105.                               word.
  2106.                Alltrim()  --  This word is a function.  The first letter
  2107.                               will be capitalized.
  2108.  
  2109.              If this is a dBASE III or dBASE IV system, SNAP! allows you to
  2110.              restrict the cross-referencing to PUBLIC variables.  If you
  2111.              select this option, SNAP! only puts public variables on the
  2112.              report.  However, SNAP! does not look for PRIVATE statements
  2113.              that redefine the variable, so if a variable is declared
  2114.              PUBLIC anywhere in the system, SNAP! documents all subsequent
  2115.              occurrences of it.  Note that SNAP! does not "backtrack" to
  2116.              see if the variable was referenced before it was defined as
  2117.              PUBLIC.
  2118.  
  2119.              I have done my best to identify key words used in dBASE,
  2120.              FoxBASE and Clipper, but I may have missed some.  Fortunately,
  2121.              the DBxWORDS.SNP file is a standard ASCII file that you can
  2122.              edit with most any word processor. So, if I have omitted one
  2123.              of your favorite key words, it is a simple matter to add it to
  2124.              the file. Function names from other third-party libraries are
  2125.              also included, but you may also want to add function names
  2126.              from other development tools.
  2127.  
  2128.              A sample cross-reference report is included in the Appendix.
  2129.  
  2130.  
  2131.  
  2132.  
  2133.                                            35
  2134.  
  2135.  
  2136.  
  2137.  
  2138.  
  2139.  
  2140.  
  2141.              LNK and MAKE files
  2142.  
  2143.              These options will be useful only to developers of
  2144.              Clipper-compiled applications.  If you are using interpretive
  2145.              dBASE III, dBASE IV or FoxPro you can ignore this section.
  2146.  
  2147.              Link Files.  SNAP! can produce a link file for PLINK86 (which
  2148.              comes with Clipper), TLINK (part of the Borland Turbo C
  2149.              package), and the Microsoft LINK utility.  If you are a
  2150.              serious Clipper programmer, the TLINK linker justifies the
  2151.              cost of the Turbo C package (less than $100)--it is that fast. 
  2152.              I have seen some informal benchmarks that show it linking
  2153.              applications as much as eight times faster than PLINK86.  Note
  2154.              that TLINK versions 2.0 and higher do not work correctly with
  2155.              Clipper.
  2156.  
  2157.              PLINK86 will accept "commands" from a LNK file.  This file
  2158.              typically contains a series of commands for the linker,
  2159.              telling the linker such things as which libraries to search
  2160.              and in what order.  SNAP! will produce a LNK file if you
  2161.              select the appropriate option.  This LNK file will contain a
  2162.              list of all the files in your system.
  2163.  
  2164.              If you have a file named LINK.SNP in your source directory,
  2165.              SNAP! will put it at the top of the LNK file.  For example,
  2166.              you might put a list of libraries in this file.  You can also
  2167.              use a name other than 'LINK.SNP' by specifying /Lfilename on
  2168.              the command line.
  2169.  
  2170.              Make Files.  SNAP! can produce the files for the Clipper MAKE
  2171.              utility (Summer 87 version only) and for the Shareware NDMAKE
  2172.              program.
  2173.  
  2174.              MAKE is a standard UNIX (tm) utility, versions of which are
  2175.              now also available for MS-DOS.  MAKE allows you to define
  2176.              which files "depend" on other files and only compile files
  2177.              that have changed. For example, in a Clipper application using
  2178.              MAKE, you would typically have one OBJ file for each PRG file. 
  2179.              Each OBJ file "depends" on the corresponding PRG file since
  2180.              the OBJ file needs to be remade when the PRG file changes.  In
  2181.              other words, when a change is made to a program file, it needs
  2182.              to be recompiled to create a new object file.  Similarly, the
  2183.              EXE file "depends" on all of the object files that are linked
  2184.              together to create it.
  2185.  
  2186.              MAKE allows you to specify these dependencies and perform the
  2187.              fewest recompiles to completely update your system for all
  2188.              program changes. It can save an enormous amount of time on the
  2189.              edit-compile-link-run cycle for a large system development.
  2190.  
  2191.              NDMAKE use three files--the MAKE.EXE file itself, a MAKE.INI
  2192.              file that specifies certain defaults, and a file named
  2193.  
  2194.                                            36
  2195.  
  2196.  
  2197.  
  2198.  
  2199.  
  2200.  
  2201.  
  2202.              MAKEFILE that contains the dependencies for your system. 
  2203.              SNAP! can create the MAKEFILE.  It is up to you to deal with
  2204.              MAKE.INI.  In particular, you will need to add a default rule
  2205.              to your MAKE.INI file to tell MAKE how to compile a PRG file
  2206.              into an OBJ file.  Its syntax is:
  2207.  
  2208.              # To produce a `.obj' file from a `.prg' file using Clipper.
  2209.                .prg.obj:; clipper $< -m
  2210.  
  2211.              This definition should work with most versions of MAKE.  If
  2212.              you use a different MAKE utility, you may need to use slightly
  2213.              different syntax here.  Check your documentation to be sure.
  2214.  
  2215.              The SNAP! MAKE option works hand-in-hand with the LNK option. 
  2216.              If you ask SNAP! to create a LNK file, SNAP! will use the same
  2217.              file name when it create MAKEFILE.
  2218.  
  2219.              The net effect of all of this is that you can issue the
  2220.              command:
  2221.  
  2222.                MAKE filename   (where filename is the name of your TopFile)
  2223.  
  2224.              and MAKE will figure out what needs to be recompiled and
  2225.              linked to create your system.
  2226.  
  2227.              Sample LNK and MAKEFILE listings are included in appendix A.
  2228.  
  2229.  
  2230.              Batch Files
  2231.  
  2232.              SNAP! also produces DOS batch files to do useful things.  One
  2233.              file, named UPDATE.BAT, will copy all program files from the
  2234.              SNAP! output directory to the original source directory.  You
  2235.              could use it to copy the new (documented) versions of your
  2236.              source files over the original (undocumented) source files. 
  2237.              The syntax for UPDATE is:
  2238.  
  2239.                UPDATE d:
  2240.  
  2241.              where d: is a drive or directory name.  If it is omitted, the
  2242.              original source directory is assumed.  Be careful with this
  2243.              file since it overwrites the original source code files.  You
  2244.              should backup your original files and review the new output
  2245.              files before executing UPDATE.  No kidding.  This is
  2246.              important.
  2247.  
  2248.              BACKPRG backs up the programs, format files and report forms
  2249.              in your system.  Its syntax is:
  2250.  
  2251.                BACKPRG d:
  2252.  
  2253.  
  2254.  
  2255.                                            37
  2256.  
  2257.  
  2258.  
  2259.  
  2260.  
  2261.  
  2262.  
  2263.              d: is a drive or directory name and is required.  If you do
  2264.              not specify a target drive or directory, the batch file will
  2265.              complain and stop.
  2266.  
  2267.              BACKDBF backs up the databases, index files and memory files
  2268.              in your system.  Its syntax is:
  2269.  
  2270.                BACKDBF d:
  2271.  
  2272.              d: is a drive or directory name and is required.  If you do
  2273.              not specify a target drive or directory, the batch file will
  2274.              complain and stop.
  2275.  
  2276.              Macros are suppressed from this file.
  2277.  
  2278.              Also, SNAP! creates the PRINTDOC.BAT file to send all
  2279.              documentation files (not including source code or action
  2280.              diagrams) to the printer. PRINTDOC calls the DOS PRINT utility
  2281.              for background printing.  Thus, PRINT must be available
  2282.              somewhere on the path.
  2283.  
  2284.  
  2285.  
  2286.              Action Diagrams
  2287.  
  2288.              An action diagram documents the structure of a program by
  2289.              using graphical symbols to group related statements together. 
  2290.              By default, SNAP! uses the IBM extended ASCII characters in
  2291.              the action diagrams it prepares.
  2292.  
  2293.  
  2294.  
  2295.  
  2296.  
  2297.  
  2298.  
  2299.  
  2300.  
  2301.  
  2302.  
  2303.  
  2304.  
  2305.  
  2306.  
  2307.  
  2308.  
  2309.  
  2310.  
  2311.  
  2312.  
  2313.  
  2314.  
  2315.  
  2316.                                            38
  2317.  
  2318.  
  2319.  
  2320.  
  2321.  
  2322.  
  2323.  
  2324.              A portion of a sample action diagram follows:
  2325.  
  2326.  
  2327.              ┌─IF s_clipper .AND. s0_filt = 7
  2328.              │  ╔═DO WHILE .NOT. s0_userfilt
  2329.              │  ║    SKIP
  2330.              │  ║  ┌─IF EOF()
  2331.              │  ║  │    GOTO TOP
  2332.              │  ║  │  ╔═DO WHILE .NOT. &s0_userfilt
  2333.              │  ║  │  ║    SKIP
  2334.              │  ║  │  ║  ┌─IF EOF()
  2335.              │  ║  │  ║  │    SET FILTER TO
  2336.              │  ║  │  ║  │    s0_userfilt = "1=1"
  2337.              │  ║  │  ║  │    GOTO TOP
  2338.              │  ║  │  ^═══════LOOP
  2339.              │  ║  │  ║  │  ┌─IF Dusty Day In The Lake
  2340.              │  ║  │  ║  │  │    ? "Yell and Scream"
  2341.              <═══════════════════RETURN
  2342.              │  ║  │  ║  │  └─ENDIF
  2343.              │  ║  │  ║  └─ENDIF
  2344.              │  ║  │  ╚═ENDDO
  2345.              │  ║  │  ╒═DO CASE
  2346.              │  ║  │  ╞═CASE lastkey() = 4
  2347.              │  ║  │  │    choice = "F"
  2348.              │  ║  │  ╞═CASE lastkey() = 19
  2349.              │  ║  │  │    choice ="B"
  2350.              │  ║  │  ╘═ENDCASE
  2351.              │  ║  └─ENDIF
  2352.              │  ╚═ENDDO
  2353.              │  ╓─FOR i = 1 TO 25
  2354.              │  ║    DO sample1
  2355.              │  ╙─NEXT
  2356.              └─ENDIF
  2357.  
  2358.              As this example shows, different extended ASCII characters are
  2359.              used to differentiate different control structures.  Loops (DO
  2360.              WHILE, FOR, SCAN) use the double-line vertical bar, while
  2361.              conditional statements (IF, DO CASE) use a single vertical
  2362.              bar.
  2363.  
  2364.              The structures are distinguished further by the horizontal
  2365.              symbol used to connect the control structure key word with the
  2366.              vertical bar.
  2367.  
  2368.              Note also that these diagrams allow you to identify "unusual"
  2369.              loop exits such as LOOP and RETURN very easily.  I can often
  2370.              identify subtle, difficult-to-locate bugs by studying the
  2371.              action diagram for the program.
  2372.  
  2373.              SNAP! will identify certain syntax errors (such as a LOOP
  2374.              statement that is not within a DO WHILE loop) only if you
  2375.  
  2376.  
  2377.                                            39
  2378.  
  2379.  
  2380.  
  2381.  
  2382.  
  2383.  
  2384.  
  2385.              choose to prepare action diagrams.  Certain error checking is
  2386.              only performed within this module.
  2387.  
  2388.              The Format screen allows you to choose whether to write action
  2389.              diagrams or not.  It also allows you to specify the extension
  2390.              that action diagram files will have.  Action diagrams always
  2391.              have the same main file name (i.e, the first eight characters)
  2392.              as the source code file from which it is drawn, but the
  2393.              extension can be anything you specify except '.PRG'.  You can
  2394.              use the '?' character as a wildcard to match the corresponding
  2395.              characters in the original file extension.  Therefore, if you
  2396.              choose an action file extension of'??T', and your original
  2397.              source file was named FOO.BAR, the action diagram file will be
  2398.              named FOO.BAT (the BA is drawn from the original filename, and
  2399.              the T comes from the action diagram file mask).
  2400.  
  2401.              Action diagram files are very much like program files and have
  2402.              the same capitalization as the output program files do. 
  2403.              However, action diagram files are not directly executable or
  2404.              compilable because of the additional line-drawing characters
  2405.              they contain.
  2406.  
  2407.              Some printers (most Epson models, for example) do not support
  2408.              the IBM graphics characters very well.  If you want to print
  2409.              action diagrams, you may want to use other characters for the
  2410.              connections.  You can choose to prepare action diagrams using
  2411.              only ASCII symbols by choosing the ASCII symbol option on the
  2412.              source code and action diagram options screen.
  2413.  
  2414.              You can also choose your own action diagram symbols on the
  2415.              'SourceCode and Action Diagram Options' screen.  The following
  2416.              chart shows how to customize the symbols:
  2417.  
  2418.                 Default symbols: ─│┌└├═║╔╚^v═│╒╘╞─║╓╙<═
  2419.  
  2420.                        Position: 0000000001111111111222
  2421.                                  1234567890123456789012
  2422.  
  2423.                Position                              Symbol
  2424.                -------- -----------------------------------------------------
  2425.                    1      Horizontal symbol used for IF/ELSE/ENDIF structures
  2426.                    2      Vertical symbol used for IF/ELSE/ENDIF structures
  2427.                    3      Corner for IF and BEGIN SEQUENCE (Clipper only)
  2428.                    4      Corner for ENDIF and END (Clipper only)
  2429.                    5      Join symbol for ELSE
  2430.                    6      Horizontal symbol used for DO WHILE/ENDDO structures
  2431.                    7      Vertical symbol used for DO WHILE/ENDDO structures
  2432.                    8      Corner for DO WHILE
  2433.                    9      Corner for ENDDO
  2434.                   10      Symbol for LOOP
  2435.                   11      Symbol for EXIT and BREAK (Clipper only)
  2436.                   12      Horizontal symbol used for DO CASE/OTHERWISE/ENDCASE
  2437.  
  2438.                                              40
  2439.  
  2440.  
  2441.  
  2442.  
  2443.  
  2444.  
  2445.  
  2446.                           structures
  2447.                   13      Vertical symbol used for DO CASE/OTHERWISE/ENDCASE
  2448.                           structures
  2449.                   14      Corner for DO CASE
  2450.                   15      Corner for ENDCASE
  2451.                   16      Join symbol for CASE and OTHERWISE
  2452.                   17      Horizontal symbol used for FOR/NEXT structures
  2453.                   18      Vertical symbol used for FOR/NEXT structures
  2454.                   19      Corner for FOR
  2455.                   20      Corner for NEXT
  2456.                   21      Arrow symbol for RETURN/CANCEL/QUIT
  2457.                   22      Horizontal symbol used for RETURN/QUIT/LOOP/EXIT
  2458.  
  2459.              You can replace any of these symbols with others of your
  2460.              choosing. If you want to restore the default set, simply
  2461.              select 'G' for graphics characters, move to another input
  2462.              screen, then come back again (in simpler terms, select 'G',
  2463.              press Ctrl-PgDn then Ctrl-PgUp). These symbols are reset when
  2464.              the 'Source Code and Action Diagrams Options' screen is
  2465.              presented.  One consequence is that you must answer 'O' (for
  2466.              Other Symbols) to be able to change the action diagram
  2467.              symbols. If you answer 'G', then change the symbols, the
  2468.              changes will not take effect.  Like other input fields, any
  2469.              user-defined symbols will be saved in the configuration file
  2470.              so you do not have to enter them at each invocation of SNAP!
  2471.  
  2472.              The SCAN/ENDSCAN control structure is documented with the same
  2473.              symbols as the DO WHILE loop.  The BEGIN SEQUENCE/BREAK/END
  2474.              control structure is diagrammed with the same symbols as an
  2475.              IF/ENDIF structure.
  2476.  
  2477.  
  2478.              Source Code Printout
  2479.  
  2480.              When you have completed your program, you will probably want a
  2481.              listing of the source code to accompany the rest of your
  2482.              documentation.  SNAP! provides a facility for formatting and
  2483.              printing dBASE source code files and/or action diagrams, and
  2484.              gives you a great deal of control over source code format. 
  2485.              You can set the following parameters:
  2486.  
  2487.                Line width
  2488.                Page length
  2489.                Left and right margins
  2490.                Top and bottom margins
  2491.                Spaces per tab
  2492.                Include or suppress line numbers
  2493.                Printer setup string
  2494.  
  2495.              For example, you can set these values to leave plenty of room
  2496.              on the left side of the page so that your code will fit in a
  2497.              3-ring binder.
  2498.  
  2499.                                            41
  2500.  
  2501.  
  2502.  
  2503.  
  2504.  
  2505.  
  2506.  
  2507.  
  2508.              If a line of code exceeds the line width minus left and right
  2509.              margins, SNAP! will wrap it on the printout without messing up
  2510.              the page breaks.  SNAP! also appropriately counts the wrapped
  2511.              line as one source code line, so that your cross-reference
  2512.              report still matches the printout.
  2513.  
  2514.              Each page of the printout contains a header showing the
  2515.              program name, system name, copyright notice, page number and
  2516.              date/time printed.  The programs are printed in alphabetical
  2517.              order.
  2518.  
  2519.              Line numbers are never added to an action diagram at print
  2520.              time. If you would like action diagrams to be printed with
  2521.              line numbers, choose the option on the format screen to add
  2522.              the line numbers directly to the action diagram file.  This is
  2523.              the default choice, so you ordinarily get action diagrams (and
  2524.              printouts) with line numbers.  The restriction on adding line
  2525.              numbers at print time prevents duplicate line numbers from
  2526.              being printed.
  2527.  
  2528.              The print section of SNAP! deals harshly with nonsense. For
  2529.              example, if the sum of your left and right margins exceeds
  2530.              your line width, SNAP! will set the line width and the margins
  2531.              to their default values.  Similarly, SNAP! will reject top and
  2532.              bottom margins greater than page length, negative values, tab
  2533.              expansions greater than 12 spaces, and so on.
  2534.  
  2535.              SNAP! prints a three-line heading on each page of the
  2536.              printout, showing program name, system name, copyright holder,
  2537.              date, time, and page number.  The heading begins on the line
  2538.              immediately following the top margin you specify. 
  2539.              Accordingly, if you use a top margin of 8 and a bottom margin
  2540.              of 8, with 66-line paper only 47 lines of code will be printed
  2541.              on each page  (66 lines - 8 top margin - 8 bottom margin - 3
  2542.              heading).
  2543.  
  2544.              For those of you with HP LaserJet II printers, try the
  2545.              following parameters:
  2546.                Line width:  132             Page length:   80
  2547.                Top margin:    4             Bottom margin:  4
  2548.                Left margin:   8             Right margin:   1
  2549.  
  2550.              Setup string: \027E\027&l0o8D\027(10U\027(s16.6H
  2551.  
  2552.              The \027E at the beginning of the string resets the printer.
  2553.  
  2554.              SNAP! allows you to enter a setup string to configure the
  2555.              printer for SNAP! (see above) and also a reset string to
  2556.              configure the printer after SNAP! has completed printing.  You
  2557.              would not ordinarily need to enter a reset string, but you
  2558.  
  2559.  
  2560.                                            42
  2561.  
  2562.  
  2563.  
  2564.  
  2565.  
  2566.  
  2567.  
  2568.              might enter one if you wanted SNAP! to leave the printer
  2569.              configured in a particular way.
  2570.  
  2571.              When you are in the print options screen, you can press "F2--
  2572.              List" to display a scrollable list of printer defaults.  If
  2573.              you select one of the printers shown, the choices associated
  2574.              with it are used to update the print options parameters, such
  2575.              as setup string, line width, page length and so forth.  This
  2576.              feature means that you don't have to remember complicated
  2577.              control strings.  You can define them in the print options
  2578.              file and select them from the list.
  2579.  
  2580.              The printer options are stored in SNAPPRT.SNP.  It is an ASCII
  2581.              file that you can edit to add more printer definitions. 
  2582.              Descriptions for how to add a printer are included at the top
  2583.              of SNAPPRT.SNP.
  2584.  
  2585.  
  2586.              Printing Without Documenting (Reprinting)
  2587.  
  2588.              You can use the source code printing facilities of SNAP!
  2589.              without going through the full time-consuming documentation
  2590.              process.  If you press the "F9--Print Now" key while viewing
  2591.              the Print screen, SNAP! will prompt you for a filename
  2592.              containing the names of files to print. SNAP! searches the
  2593.              file you name and prints the contents of the files listed
  2594.              therein.  SNAP! will not print a file with an extension of
  2595.              MEM, FRM, DBF, NDX, NTX, IDX, MDX, EXE, COM and other common
  2596.              non-ASCII Dbase names.  Also, SNAP! tries to figure out if a
  2597.              particular file is not an ASCII file and warn you about it
  2598.              before printing.
  2599.  
  2600.              SNAP! will not try to print from anything that isn't a
  2601.              filename, so the file you specify can contain all sorts of
  2602.              garbage without causing a problem.  The main effect of all
  2603.              this is that you can give the Print routines the name of a
  2604.              SNAP! REPRINT.DOC file and it will print all the source code
  2605.              in the system without going through the full SNAP!
  2606.              documentation process again.  Of course, you can create your
  2607.              own file containing filenames to print also.  You can also use
  2608.              this feature (and the DOCLIST.DOC file--just like REPRINT.DOC
  2609.              excpet it holds the names of documentation files instead of
  2610.              source code files) to print documentation files in a nicely
  2611.              formatted way.
  2612.  
  2613.  
  2614.  
  2615.  
  2616.  
  2617.  
  2618.  
  2619.  
  2620.  
  2621.                                            43
  2622.  
  2623.  
  2624.  
  2625.  
  2626.  
  2627.  
  2628.  
  2629.  
  2630.                            Using SNAP! in a Batch Environment
  2631.  
  2632.              If you have several systems to document, you may wish to set
  2633.              up a batch file to invoke SNAP! with the appropriate
  2634.              parameters for each system so that you can come back in a week
  2635.              or two and find all your programs beautifully documented. 
  2636.              SNAP! supports Immediate Mode for batch documentation through
  2637.              the /X switch on the command line.  Used in conjunction with
  2638.              named configuration and macro files, you can sequentially
  2639.              document a series of dBASE systems.  SNAP! will take its input
  2640.              from the configuration files (or from CONFIG.SNP if no
  2641.              configuration file is named) and begin documenting the system
  2642.              immediately.  Note that you have to have your configuration
  2643.              file ready before you invoke the system.  If you do not
  2644.              specify a configuration file, SNAP! tries to use CONFIG.SNP in
  2645.              the current directory.
  2646.  
  2647.              For example, to document three dBASE systems without pausing
  2648.              for user input, set up a batch file with these lines:
  2649.  
  2650.                SNAP /x /fsystem1.snp
  2651.                SNAP /x /fsystem2.snp
  2652.                SNAP /x
  2653.  
  2654.              SNAP! will document the first system and take input from the
  2655.              SYSTEM1.SNP configuration file.  Then, without prompting for
  2656.              further user action, it will read SYSTEM2.SNP and begin
  2657.              documenting the second system.  Input for the third system is
  2658.              in the CONFIG.SNP (default name) file.  When the batch file is
  2659.              invoked, SNAP! will begin documenting and will not pause for
  2660.              user input at any point in the process.
  2661.  
  2662.              If an error occurs anywhere during the processing of these
  2663.              three systems, SNAP! will display an error message and stop
  2664.              documenting the system that experienced the error.  The batch
  2665.              file, however, will continue running and will move on to the
  2666.              next system to be documented.
  2667.  
  2668.  
  2669.  
  2670.  
  2671.  
  2672.  
  2673.  
  2674.  
  2675.  
  2676.  
  2677.  
  2678.  
  2679.  
  2680.  
  2681.  
  2682.                                            44
  2683.  
  2684.  
  2685.  
  2686.  
  2687.  
  2688.  
  2689.  
  2690.                                       Random Notes
  2691.  
  2692.              These are some other thoughts that don't seem to fit anywhere
  2693.              else.
  2694.  
  2695.              If you have a file named HELP.PRG in the program directory,
  2696.              SNAP! assumes this must be a Clipper system, where 'HELP' is a
  2697.              magic name and documents the program accordingly.  SNAP!
  2698.              treats HELP.PRG as if it were called directly from TopFile.
  2699.  
  2700.  
  2701.  
  2702.  
  2703.  
  2704.  
  2705.  
  2706.  
  2707.  
  2708.  
  2709.  
  2710.  
  2711.  
  2712.  
  2713.  
  2714.  
  2715.  
  2716.  
  2717.  
  2718.  
  2719.  
  2720.  
  2721.  
  2722.  
  2723.  
  2724.  
  2725.  
  2726.  
  2727.  
  2728.  
  2729.  
  2730.  
  2731.  
  2732.  
  2733.  
  2734.  
  2735.  
  2736.  
  2737.  
  2738.  
  2739.  
  2740.  
  2741.  
  2742.  
  2743.                                            45
  2744.  
  2745.  
  2746.  
  2747.  
  2748.  
  2749.  
  2750.  
  2751.                                   Program Limitations
  2752.                               and Things To Watch Out For
  2753.  
  2754.              SNAP! had the following design limitations when this
  2755.              documentation was written:
  2756.  
  2757.                Maximum program files:             1024 programs, procedures
  2758.                                                        and functions
  2759.                Maximum other files:                128 of each type
  2760.                                                        (e.g.databases)
  2761.                Maximum variables:                 2500 throughout the
  2762.                                                        system
  2763.                 Maximum key words:                1500 words
  2764.                Maximum length of key word:          15 characters
  2765.                Maximum length of a token:           20 characters
  2766.                Maximum levels of program nesting:   20  levels
  2767.                Maximum number of database fields: 1024 throughout the
  2768.                                                        system
  2769.                Maximum length of filename:          67 characters
  2770.                                                        (including path)
  2771.  
  2772.              These limitations were current when this documentation was
  2773.              written.  You can verify them (it would be a good idea) by
  2774.              viewing the program limitations screen (Press F1 three times
  2775.              from the greeting screen).
  2776.  
  2777.              SNAP! uses about 210K of memory as "overhead."  This much is
  2778.              used as soon as the program is invoked.  It also allocates
  2779.              additional memory dynamically as it is needed.  It is a memory
  2780.              hog and will probably not be of much use if you don't have at
  2781.              least 512K. Look at it this way: memory boards cost less than
  2782.              commercial programs that compete with SNAP!.  Don't look at
  2783.              SNAP! as free software--look at it as an excuse to buy more
  2784.              hardware.
  2785.  
  2786.  
  2787.              Legal Coding that is Prohibited by SNAP!
  2788.  
  2789.              I make no promises about what will happen if you run SNAP!
  2790.              against invalid Dbase syntax, but predict that the results
  2791.              will not be satisfying.  On the other hand, there are some
  2792.              "legal" coding techniques for Dbase that cause problems with
  2793.              SNAP!.  I have tried to keep these to a minimum, but some yet
  2794.              remain.
  2795.  
  2796.              You cannot use the word "END" as a variable in an assignment
  2797.              statement of the form:
  2798.                END = foo.
  2799.              SNAP! sees the 'END' (which is a valid control structure
  2800.              terminator in Clipper), treats anything else on the line as a
  2801.              comment, and becomes powerfully confused.  Using "END" in a: 
  2802.                STORE foo TO end
  2803.  
  2804.                                            46
  2805.  
  2806.  
  2807.  
  2808.  
  2809.  
  2810.  
  2811.  
  2812.              statement is acceptable.  You also cannot use PROCEDURE or
  2813.              FUNCTION (or a valid abbreviation of either) as a variable
  2814.              name.
  2815.  
  2816.              SNAP! does not track control structures across program or
  2817.              procedure boundaries.  Normally, this is not a problem since
  2818.              you cannot start a DO WHILE loop in one program and finish it
  2819.              in another.  However, a BREAK statement can be in one program,
  2820.              while the loop it is breaking out of is in another file. 
  2821.              Thus, SNAP! does not report an error when it sees a BREAK
  2822.              statement, even if it cannot tell whether there is a loop for
  2823.              the BREAK to apply to.
  2824.  
  2825.              Hyphens in Filenames
  2826.  
  2827.              SNAP! uses treats a hyphen as a delimiter when it is scanning
  2828.              your source code to prepare the cross-reference report, since
  2829.              the hyphen usually means "subtract."  Thus, foo = bar-baz will
  2830.              correctly generate three cross-references--one for "foo", one
  2831.              for "bar" and one for "baz".  This technique breaks down when
  2832.              SNAP! sees "DO foo-bar."  In this case, both "foo" and "bar"
  2833.              will be cross-referenced.  Note that SNAP! will find the right
  2834.              file and continue documenting--it is only the cross-reference
  2835.              report that is misleading.
  2836.  
  2837.  
  2838.              Continuation Lines
  2839.  
  2840.              Continuation lines may be a problem in some circumstances. 
  2841.              SNAP! actually reads each source file twice--once to check for
  2842.              files and once to handle formatting (indentation,
  2843.              capitalization, etc.) and cross-referencing.  SNAP! tries to
  2844.              deal with continuation lines during the first scan and so will
  2845.              properly parse statements such as:
  2846.  
  2847.                SET INDEX TO brlfq, foo, bar, ;
  2848.                   baz, plugh
  2849.  
  2850.              and
  2851.  
  2852.                SUM hatsize ;
  2853.                   FOR level = "MANAGEMENT"
  2854.  
  2855.              (This latter statement led to particularly insidious effects
  2856.              before continuation lines were parsed--SNAP! treated it as the
  2857.              beginning of a FOR-NEXT control structure.  This made for
  2858.              interesting action diagrams.)
  2859.  
  2860.              However, SNAP! cannot tell that:
  2861.  
  2862.                abracadabra = ;
  2863.                   opensesame
  2864.  
  2865.                                            47
  2866.  
  2867.  
  2868.  
  2869.  
  2870.  
  2871.  
  2872.  
  2873.  
  2874.              is an assignment statement.  Accordingly, the cross-reference
  2875.              report will not contain the correct flag for an assignment
  2876.              statement.  While "abracadabra" and "opensesame" will properly
  2877.              appear on the report, the proper cross-reference marker will
  2878.              not be present.
  2879.  
  2880.              Total line length, counting the length of continuation lines
  2881.              but not leading and trailing white space, is limited to 255
  2882.              characters.  SNAP! warns you when it sees a longer line.  This
  2883.              is not a limitation on dBASE systems, since dBASE imposes the
  2884.              same limit.  FoxPro, Clipper and some other systems, however,
  2885.              allow lines to exceed the 255-character limit.  SNAP! reports
  2886.              that it found a "line too long," ignores any bytes after the
  2887.              255-character limit, and proceeds on its merry way.  
  2888.  
  2889.              There may be other anomalies related to continuation lines
  2890.              that I have not thought of.
  2891.  
  2892.  
  2893.  
  2894.              Multiple Procedure Files
  2895.  
  2896.              If you use multiple procedure files and if they contain
  2897.              procedures that have the same name, SNAP! may document your
  2898.              system incorrectly. For example, assume you have two procedure
  2899.              files that are SET at different points in the system.  Both
  2900.              files contain a procedure called FOO, but FOO is not the same
  2901.              in each file.  When SNAP! searches for procedures, it will
  2902.              always find the first FOO and assume it is the one being
  2903.              called.  SNAP! does not track which procedure file is
  2904.              currently active and cannot distinguish between
  2905.              identically-named procedures in different procedure files. 
  2906.              This limitation has no effect on systems that use only one
  2907.              procedure file, or on systems that have multiple procedure
  2908.              files each containing uniquely-named procedures.
  2909.  
  2910.              Giving different things the same name (this is my other
  2911.              brother Daryl) is a bad programming habit to get into.  It is
  2912.              a good idea to use unique names for each procedure, function,
  2913.              procedure file and program.
  2914.  
  2915.  
  2916.              Suppressing Color
  2917.  
  2918.              If you do not like the colors I selected, or if they do not
  2919.              display properly on your monitor, putting the "/BW" switch on
  2920.              the command line will disable color.
  2921.  
  2922.  
  2923.  
  2924.  
  2925.  
  2926.                                            48
  2927.  
  2928.  
  2929.  
  2930.  
  2931.  
  2932.  
  2933.  
  2934.                                      Change History
  2935.  
  2936.              SNAP! has undergone several major changes.  The following list
  2937.              is not all-inclusive, but does hit the high points.
  2938.  
  2939.              Changes From Version 3.0 to Version 4.0
  2940.  
  2941.              Speed.  Version 4.0 is about 25% faster than version 3.0 if
  2942.              you have enough EMS memory to hold the 210K overlay.  If not,
  2943.              the speed of versions 4.0 and 3.0 will be approximately equal.
  2944.  
  2945.              Memory Capacity.  Version 4.0 uses program overlays to
  2946.              increase the amount of memory available for cross referencing. 
  2947.              You will ordinarily get about 50K more memory with 4.0.
  2948.  
  2949.              Dialect Support.  SNAP! 4.0 now supports dBASE IV and FoxPro,
  2950.              as well as all of the previously-supported variants of the
  2951.              Dbase language.
  2952.  
  2953.              Mouse Support.  SNAP! 4.0 now fully supports mousing.  You can
  2954.              use the mouse to position the cursor, select function keys,
  2955.              and do pretty much everything else you would expect.
  2956.  
  2957.              Report Form and Label Documentation.  If you are using dBASE
  2958.              IV, SNAP! will automatically document the FRG and LBG files
  2959.              that dBASE IV produces.  These files are very much like
  2960.              program files and contain the code to implement the reports or
  2961.              labels you have defined.  SNAP! will include these files in
  2962.              the "CALLS" lists in the headings and will also include them
  2963.              in the tree diagram if you have set the tree options to
  2964.              display them.  SNAP! does not produce the full report form
  2965.              documentation for these files.
  2966.  
  2967.              UDF Recognition.  The code for detecting calls to user defined
  2968.              functions (UDFs) has been extensively revised and should now
  2969.              detect nearly all calls to UDFs, even the sneaky and
  2970.              underhanded ones.  For example, SNAP! now detects UDF calls
  2971.              from MEMOEDIT, DBEDIT and ACHOICE in Clipper applications, as
  2972.              well as a host of other, special, UDF situations.
  2973.  
  2974.              Documentation of Other Files.  Version 4.0 now tracks "other"
  2975.              files--files that don't fit into any of the categories such as
  2976.              databases, index files, etc.  Examples of other files include
  2977.              text files that are appended into memo fields, output files
  2978.              from "SET PRINTER TO foo.txt" statements and so forth.
  2979.  
  2980.              Printer Definition File.  SNAP! 4.0 now is distributed with a
  2981.              printer definition file, SNAPPRT.SNP, that contains parameters
  2982.              for some common printers.  It is an ASCII file and you can add
  2983.              new printers (or variants of existing printers) to the list.
  2984.  
  2985.  
  2986.  
  2987.                                            49
  2988.  
  2989.  
  2990.  
  2991.  
  2992.  
  2993.  
  2994.  
  2995.              Parameters.  SNAP! now displays function and procedures
  2996.              parameters, if any, in the procedure summary.  Each procedure
  2997.              or function that takes a parameter will have the paramater
  2998.              line displayed next to the function name in the Procedures
  2999.              Summary report.
  3000.  
  3001.              Page breaks.  You can now use the "*# SNAP FORMFEED" directive
  3002.              to force a page break at a specific spot in the source code. 
  3003.              The "*# SNAP FORMFEED" directive itself is not printed.
  3004.  
  3005.              Program Narratives.  SNAP! 4.0 supports program narratives if
  3006.              they start with "*)" and echoes them to the HEADINGS.DOC file,
  3007.              suitable for use as a cover page for each source code file.
  3008.  
  3009.              Third-Party Libraries.  SNAP! 4.0 is distributed with a set of
  3010.              key words for several popular third-party function libraries. 
  3011.              You can instruct SNAP! to treat these key words as if they
  3012.              were part of the language, which improves SNAP!'s handling of
  3013.              capitalization, formating and other aspects of your
  3014.              documentation.
  3015.  
  3016.              PERSONAL.KEY.  You can now create a file with your own set of
  3017.              key words.  "PERSONAL.KEY" is a magic name--SNAP! searches for
  3018.              it in the SNAP! subdirectory and adds anything it finds in it
  3019.              to the key words list.
  3020.  
  3021.              "*# INCLUDE" key words.  You can add a "*# INCLUDE foo"
  3022.              statement to DB4WORDS.SNP or PERSONAL.KEY to include other key
  3023.              words files, such as the third-party function library key
  3024.              words described above.
  3025.  
  3026.              Control Struture commenting.  Version 4.0 also allows you to
  3027.              add comments to the ends of control structures such as
  3028.              IF/ENDIF and CASE/ENDCASE.  For example, you can instruct
  3029.              SNAP! to add the IF condition after each ENDIF.
  3030.                  IF foo = bar
  3031.                     DO this
  3032.                  ENDIF (foo = bar)    <-- SNAP! adds the "(foo = bar)"
  3033.  
  3034.              Reprinting source code.  You can now run SNAP!, exit the
  3035.              program without printing source code, and use the "F9--print
  3036.              now" option to print the source code later.  SNAP! now creates
  3037.              a REPRINT.DOC file that contains the names of all programs,
  3038.              procedures, action files and other files that are printed with
  3039.              source code.  Prior to version 4.0 it was difficult to print
  3040.              source code if you did not do it during the SNAP!
  3041.              documentation run.  In addition, SNAP! creates the DOCLIST.DOC
  3042.              file that contains the names of documentation files.  You can
  3043.              also use F9 to print these files.
  3044.  
  3045.  
  3046.  
  3047.  
  3048.                                            50
  3049.  
  3050.  
  3051.  
  3052.  
  3053.  
  3054.  
  3055.  
  3056.              Changes From Version 2.0 to Version 3.0 
  3057.  
  3058.              Speed.  Version 3.0 is be approximately 2.5 times as fast as
  3059.              version 2.0.  The more procedures you use, the faster it will
  3060.              be. SNAP! 2.0 was particularly inefficient in documenting
  3061.              procedures.
  3062.  
  3063.              Source Code Printing.  You can now use the source code
  3064.              printing routines without going through the entire
  3065.              documentation process. When you press the right function key,
  3066.              it asks for a filename. SNAP! searches this file for other
  3067.              filenames, which it then prints.
  3068.  
  3069.              User Interface.  The user interface has gotten an
  3070.              interface-lift <guffaw> since the last version.  The number of
  3071.              option screens grew too large to be conveniently browsed with
  3072.              the facilities in version 2.  Version 3 now organizes all the
  3073.              screens underneath a main menu.  You can also select menu
  3074.              items with Alt-key combinations, without having to deal with
  3075.              the menu itself.
  3076.  
  3077.              Memory Usage.  SNAP! 3.0 uses some additional dynamic data
  3078.              structures to minimize wasted space.  Under normal
  3079.              circumstances, it should roughly triple the size of the
  3080.              application that can be accommodated by the system.  In
  3081.              addition, after the conversion to Turbo Pascal 4.0, the size
  3082.              of the program itself shrank by about 20%.
  3083.  
  3084.              New Reports.  A system summary is now available to show: 
  3085.                 Lines of code
  3086.                Database and index names
  3087.                Number of program files
  3088.                Number of procedures
  3089.                 . . . and lots of other summary information.
  3090.  
  3091.              Arrays are recognized in the cross-reference report and are
  3092.              denoted with brackets (for Clipper) or parentheses (for
  3093.              FoxBASE), as appropriate (e.g., FOO[100] or FOO(100,50) ),
  3094.              with the declared size shown.  The cross-reference report also
  3095.              lists public variables, macros and arrays separately.
  3096.  
  3097.              The report form documentation has been revised extensively
  3098.              (dBASE III only).  It now shows each of the fields in the
  3099.              report, displays the report heading, etc.  Similar
  3100.              documentation is now available for label forms, which were
  3101.              ignored entirely by SNAP! version 2.0.)
  3102.  
  3103.              The database summary now includes start and end columns for
  3104.              each field.  Alias names are now usually shown with the
  3105.              appropriate physical database file in the data dictionary,
  3106.              file heading, tree, etc.
  3107.  
  3108.  
  3109.                                            51
  3110.  
  3111.  
  3112.  
  3113.  
  3114.  
  3115.  
  3116.  
  3117.              Link files can now be created for PLINK86, Turbo C TLINK, or
  3118.              the Microsoft LINK program.  Make files continue to support
  3119.              NDMAKE and now also support the Clipper MAKE utility.
  3120.  
  3121.              File headings and may other reports show the date and time of
  3122.              last change, based on the file date/time stamp.
  3123.  
  3124.              Additional Options
  3125.  
  3126.              Here are some of the new things you can control: 
  3127.                Suppression of blank lines in output file
  3128.                Suppression of comments in output file
  3129.                Optional extra indent under DO CASE statement 
  3130.                Inclusion of DBF, NDX, MEM, FRM and LBL files in the tree 
  3131.                Capitalization of key words
  3132.                Capitalization of tokens
  3133.                Temporary suspension of cross-referencing and formatting
  3134.                Leave the file date/time stamp unchanged
  3135.                Separate directories for programs and databases
  3136.  
  3137.              Changes Since SNAP! Version 1.0
  3138.  
  3139.              Practically everything.
  3140.  
  3141.  
  3142.  
  3143.  
  3144.  
  3145.  
  3146.  
  3147.  
  3148.  
  3149.  
  3150.  
  3151.  
  3152.  
  3153.  
  3154.  
  3155.  
  3156.  
  3157.  
  3158.  
  3159.  
  3160.  
  3161.  
  3162.  
  3163.  
  3164.  
  3165.  
  3166.  
  3167.  
  3168.  
  3169.  
  3170.                                            52
  3171.  
  3172.  
  3173.  
  3174.  
  3175.  
  3176.  
  3177.  
  3178.                               Some Administrative Matters
  3179.  
  3180.              Version Numbers
  3181.  
  3182.              In the past, I have sometimes been criticized for releasing
  3183.              one or more "maintenance" versions shortly after a major
  3184.              update.  I am guilty, but unrepentant.  In an attempt to be
  3185.              responsive to user suggestions and bug reports, I will
  3186.              continue to add features and fix bugs as they are reported. 
  3187.              When the resulting minor changes are uploaded, the SNAP!
  3188.              version will include a letter (e.g., SNAP! version 4.00 will
  3189.              change to 4.00a).  In this example, if you have version 4.00,
  3190.              don't worry about downloading another version before 4.1
  3191.              unless you need the specific features in the intervening
  3192.              versions.
  3193.  
  3194.  
  3195.              Updates and New Versions
  3196.  
  3197.              SNAP! is available on Compuserve.  At the time this
  3198.              documentation file was written, copies are available on the
  3199.              Nantucket forum and on the Ashton-Tate forum.
  3200.  
  3201.              Rather than download the large SNAP! files, you may prefer to
  3202.              send me a blank, formatted diskette (either 3.5 or 5.25 inch,
  3203.              but 3.5 takes longer) and a postage-paid diskette mailer, and
  3204.              I will send you the most current version.  My address is:
  3205.                Walter J. Kennamer
  3206.                7027 Dunstans Lane
  3207.                Toledo, Ohio   43617
  3208.  
  3209.              If you want me to supply the mailers, disks and postage,
  3210.              please enclose a check for $25.  This high figure is
  3211.              ostensibly for postage and handling, but is really for putting
  3212.              me to the trouble of buying mailers, disks and stamps.  I
  3213.              prefer programming to managing a mailing effort, so I will do
  3214.              the former cheaply but the latter only for a price.
  3215.  
  3216.  
  3217.              How to Get Support
  3218.  
  3219.              My CIS ID is 74025,514.  I log on nearly every day, except
  3220.              when I am traveling.  I am easiest to reach through EasyPlex,
  3221.              but I also check in on the Ashton-Tate, Nantucket and the PC
  3222.              Vendors Forums periodically.  If you have any suggestions
  3223.              about how to improve SNAP! or if you have encountered a bug,
  3224.              please let me know.
  3225.  
  3226.              My job requires me to travel frequently, and I am usually hard
  3227.              to reach by telephone.  You will probably have better success
  3228.              reaching me through Compuserve or by mail.
  3229.  
  3230.  
  3231.                                            53
  3232.  
  3233.  
  3234.  
  3235.  
  3236.  
  3237.  
  3238.  
  3239.  
  3240.              Association of Shareware Professionals
  3241.  
  3242.              I am a member of the Association of Shareware Professionals
  3243.              (ASP).  ASP wants to make sure that the shareware principle
  3244.              works for you.  If you are unable to resolve a shareware-
  3245.              related problem with an ASP member by contacting the member
  3246.              directly, ASP may be able to help.  The ASP Ombudsman can help
  3247.              you resolve a dispute or problem with an ASP member, but does
  3248.              not provide technical support for members' products.  Please
  3249.              write to the ASP Ombudsman at P.O. Box 5786, Bellevue, WA 
  3250.              98006 or send a Compuserve message via Easyplex to ASP
  3251.              Ombudsman 70007,3536.
  3252.  
  3253.  
  3254.  
  3255.  
  3256.  
  3257.  
  3258.  
  3259.  
  3260.  
  3261.  
  3262.  
  3263.  
  3264.  
  3265.  
  3266.  
  3267.  
  3268.  
  3269.  
  3270.  
  3271.  
  3272.  
  3273.  
  3274.  
  3275.  
  3276.  
  3277.  
  3278.  
  3279.  
  3280.  
  3281.  
  3282.  
  3283.  
  3284.  
  3285.  
  3286.  
  3287.  
  3288.  
  3289.  
  3290.  
  3291.  
  3292.                                            54
  3293.  
  3294.  
  3295.  
  3296.  
  3297.  
  3298.  
  3299.  
  3300.                                     Acknowledgements
  3301.  
  3302.              Special thanks to Andy Walsh for writing several string
  3303.              procedures in assembly language for me.  Thanks to Peter
  3304.              Petto, Paul Ferrara and everyone else who helped me develop
  3305.              and debug SNAP!  Thanks to the Compuserve Nantucket SIG for
  3306.              all the help its members gave me.  Thanks to Dave Heindel for
  3307.              helping me speed it up.  Thanks to Pat Adams for public
  3308.              relations.
  3309.  
  3310.              Thanks to all the beta testers who helped so much with
  3311.              handling the last-minute details.  I used to mention them
  3312.              separately.  I don't anymore, though, so that they are not
  3313.              blamed for any of the last-minute details that turn out not to
  3314.              have been handled after all.  They know who they are.
  3315.  
  3316.  
  3317.  
  3318.  
  3319.  
  3320.  
  3321.  
  3322.  
  3323.  
  3324.  
  3325.  
  3326.  
  3327.  
  3328.  
  3329.  
  3330.  
  3331.  
  3332.  
  3333.  
  3334.  
  3335.  
  3336.  
  3337.  
  3338.  
  3339.  
  3340.  
  3341.  
  3342.  
  3343.  
  3344.  
  3345.  
  3346.  
  3347.  
  3348.  
  3349.  
  3350.  
  3351.  
  3352.  
  3353.                                            55
  3354.  
  3355.  
  3356.  
  3357.  
  3358.  
  3359.  
  3360.  
  3361.  
  3362.                               Appendix A -- Sample Reports
  3363.  
  3364.              The following sample reports illustrate the formats of some
  3365.              SNAP! output.  Since the documentation for a full system is
  3366.              voluminous, only limited portions of the documentation are
  3367.              presented here. This saves much space, but has the
  3368.              disadvantage of making some reports "out of sync."  Thus, the
  3369.              internal consistency of a complete package of documentation is
  3370.              missing here.  For example, if you try to trace the entries in
  3371.              the tree back to TODO.PRG, you will discover that they don't
  3372.              track since I trimmed out much of TODO.PRG so as to reduce the
  3373.              bulk of the documentation file. Similarly, the system summary
  3374.              shows a lot of databases that aren't in the DATADICT.DOC file.
  3375.  
  3376.              Of course, the best way to see sample SNAP! reports is to run
  3377.              it on some of your own programs.
  3378.  
  3379.  
  3380.  
  3381.  
  3382.  
  3383.  
  3384.  
  3385.  
  3386.  
  3387.  
  3388.  
  3389.  
  3390.  
  3391.  
  3392.  
  3393.  
  3394.  
  3395.  
  3396.  
  3397.  
  3398.  
  3399.  
  3400.  
  3401.  
  3402.  
  3403.  
  3404.  
  3405.  
  3406.  
  3407.  
  3408.  
  3409.  
  3410.  
  3411.  
  3412.  
  3413.  
  3414.                                            56
  3415.  
  3416.  
  3417.  
  3418.  
  3419.  
  3420.  
  3421.  
  3422.  
  3423.        *:*********************************************************************
  3424.        *:
  3425.        *:        Program: TODO.PRG
  3426.        *:
  3427.        *:         System: ToDo -- To Do Management System
  3428.        *:         Author: Walter J. Kennamer
  3429.        *:      Copyright (c) 1988, Walter J. Kennamer
  3430.        *:  Last modified: 02/26/88     23:00
  3431.        *:
  3432.        *:          Calls: HELP.PRG
  3433.        *:               : F2_HANDLR        (procedure in TODOPRC.PRG)
  3434.        *:               : HELPEDIT         (procedure in TODOPRC.PRG)
  3435.        *:               : TDDEFLT.PRG
  3436.        *:               : ERRORMSG         (procedure in TODOPRC.PRG)
  3437.        *:               : SETDATE.PRG
  3438.        *:               : TDLOGO.PRG
  3439.        *:               : TDSETUP.PRG
  3440.        *:               : TDINPUT.PRG
  3441.        *:
  3442.        *:   Memory Files: ACCESSES.MEM
  3443.        *:               : DEFAULT.MEM
  3444.        *:
  3445.        *:     Documented: 03/02/88 at 18:39                 SNAP! version 3.00
  3446.        *:*********************************************************************
  3447.        PARAMETERS c_line               && command line
  3448.        *# SNAPMACRO s_tdfile   todo
  3449.        *# SNAPMACRO s_ddndx    tododd
  3450.        *# SNAPMACRO s0_adfname address
  3451.        external subject
  3452.        PUBLIC clipper,s_cmdline
  3453.        IF pcount() > 0
  3454.           s_cmdline = Alltrim(UPPER(c_line))
  3455.        ELSE
  3456.           s_cmdline = ""
  3457.        ENDIF
  3458.           .
  3459.           .
  3460.           .
  3461.        * read defaults
  3462.        USE
  3463.        IF FILE("default.mem")
  3464.           REST FROM  DEFAULT ADDITIVE
  3465.           IF s0_bw
  3466.              s0_montype = "M"
  3467.           ELSE
  3468.              s0_montype = "C"
  3469.           ENDIF
  3470.        ELSE
  3471.           DO tddeflt
  3472.        ENDIF
  3473.        DO tdinput
  3474.  
  3475.                                            57
  3476.  
  3477.  
  3478.  
  3479.  
  3480.  
  3481.  
  3482.  
  3483.        *: EOF: TODO.PRG
  3484.  
  3485.  
  3486.  
  3487.  
  3488.  
  3489.  
  3490.  
  3491.  
  3492.  
  3493.  
  3494.  
  3495.  
  3496.  
  3497.  
  3498.  
  3499.  
  3500.  
  3501.  
  3502.  
  3503.  
  3504.  
  3505.  
  3506.  
  3507.  
  3508.  
  3509.  
  3510.  
  3511.  
  3512.  
  3513.  
  3514.  
  3515.  
  3516.  
  3517.  
  3518.  
  3519.  
  3520.  
  3521.  
  3522.  
  3523.  
  3524.  
  3525.  
  3526.  
  3527.  
  3528.  
  3529.  
  3530.  
  3531.  
  3532.  
  3533.  
  3534.  
  3535.  
  3536.                                            58
  3537.  
  3538.  
  3539.  
  3540.  
  3541.  
  3542.  
  3543.  
  3544.  
  3545.        System Summary
  3546.  
  3547.        System: ToDo -- To Do Management System
  3548.        Author: Walter J. Kennamer
  3549.        03/02/88   18:56:29
  3550.        System Summary
  3551.  
  3552.        -------------------------------------------------------------------------
  3553.  
  3554.  
  3555.        This system has:
  3556.          8636 lines of code
  3557.            46 program files
  3558.             2 procedure files
  3559.            84 procedures and functions
  3560.            18 databases
  3561.             8 index files
  3562.             3 report forms
  3563.             0 format files
  3564.             0 label forms
  3565.             5 memory variable files
  3566.           622 cross-referenced tokens
  3567.  
  3568.  
  3569.        See the tree diagram for programs, procedures, functions and format files
  3570.  
  3571.  
  3572.                           Index          Report         Label          Memory
  3573.          Databases        Files          Forms          Forms          Files
  3574.        -------------- -------------- -------------- -------------- -------------
  3575.  
  3576.        HELP.DBF       HELPKEY.NTX    SUBREPT.FRM                   ACCESSES.MEM
  3577.        TODO.SKL       SUBJECT.NTX    TDSUMIN.FRM                   DEFAULT.MEM
  3578.        TODO.DBF       TODODD.NTX     TDDETIN.FRM                   LASTFILE.MEM
  3579.        SUBJECT.DBF    &NTXNAME                                     PRINTER.MEM
  3580.        ADDRESS.DBF    HISTDD.NTX                                   CLIP.MEM
  3581.        &B_FILE.DBF    PRIORITY.NDX
  3582.        NOTEPAD.DBF    DATEDUE.NDX
  3583.        PRTCODES.DBF   DATEDUE.NTX
  3584.        &FILE
  3585.        HIST.DBF
  3586.        TEMP.DBF
  3587.        &FNAME
  3588.        &BAK_NAME.DBF
  3589.        &FNAME.DBF
  3590.        AREACODE.DBF
  3591.        DATEDUE.DBF
  3592.        PRM.SKL
  3593.        ADDRESS.ASC
  3594.  
  3595.  
  3596.  
  3597.                                            59
  3598.  
  3599.  
  3600.  
  3601.  
  3602.  
  3603.  
  3604.  
  3605.  
  3606.  
  3607.        -------------------------------------------------------------------------
  3608.        SNAP! created the following documentation files:
  3609.           C:\SCRATCH\STATS.DOC
  3610.           C:\SCRATCH\TREE.DOC
  3611.           C:\SCRATCH\FILELIST.DOC
  3612.           C:\SCRATCH\NDXSUMRY.DOC
  3613.           C:\SCRATCH\DATADICT.DOC
  3614.           C:\SCRATCH\FRMSUMRY.DOC
  3615.           C:\SCRATCH\PRCSUMRY.DOC
  3616.           C:\SCRATCH\XREF.DOC
  3617.           C:\SCRATCH\TODO.LNK
  3618.           C:\SCRATCH\TODO.TLK
  3619.           C:\SCRATCH\TODO.MLK
  3620.           C:\SCRATCH\MAKEFILE
  3621.           C:\SCRATCH\ERROR.DOC
  3622.           Action diagram files
  3623.           UPDATE.BAT   to update program source files in C:\TODO
  3624.           BACKDBF.BAT  to backup databases, indexes and memory files
  3625.           BACKPRG.BAT  to backup program files, report forms and format files
  3626.           PRINTDOC.BAT to print documentation files
  3627.  
  3628.  
  3629.  
  3630.  
  3631.  
  3632.  
  3633.  
  3634.  
  3635.  
  3636.  
  3637.  
  3638.  
  3639.  
  3640.  
  3641.  
  3642.  
  3643.  
  3644.  
  3645.  
  3646.  
  3647.  
  3648.  
  3649.  
  3650.  
  3651.  
  3652.  
  3653.  
  3654.  
  3655.  
  3656.  
  3657.  
  3658.                                            60
  3659.  
  3660.  
  3661.  
  3662.  
  3663.  
  3664.  
  3665.  
  3666.  
  3667.        System: ToDo -- To Do Management System
  3668.        Author: Walter J. Kennamer
  3669.        03/02/88   18:56:09
  3670.        Tree Diagram
  3671.  
  3672.        -------------------------------------------------------------------------
  3673.  
  3674.        TODO.PRG
  3675.        ├────HELP.PRG
  3676.        │    │    HELP.DBF (database)
  3677.        │    ├────SHOW_HELP (procedure in HELP.PRG)
  3678.        │    │    ├────SETCOLOR (procedure in TODOPRC.PRG)
  3679.        │    │    └────CENTER (procedure in TODOPRC.PRG)
  3680.        │    ├────SETCOLOR (procedure in TODOPRC.PRG)
  3681.        │    └────CENTER (procedure in TODOPRC.PRG)
  3682.        ├────F2_HANDLR (procedure in TODOPRC.PRG)
  3683.        │    ├────ADDRLIST.PRG
  3684.        │    │    └────SETCOLOR (procedure in TODOPRC.PRG)
  3685.        │    └────NUMLIST.PRG
  3686.        │         └────SETCOLOR (procedure in TODOPRC.PRG)
  3687.        ├────HELPEDIT (procedure in TODOPRC.PRG)
  3688.        ├────TDDEFLT.PRG
  3689.        │    ├────SETCOLOR (procedure in TODOPRC.PRG)
  3690.        │    ├────SCRHEAD (procedure in TODOPRC.PRG)
  3691.        │    │    └────SETCOLOR (procedure in TODOPRC.PRG)
  3692.        │    ├────TDSETUP.PRG
  3693.        │    │    │    TODO.SKL (database)
  3694.        │    │    │    TODO.DBF (database)
  3695.        │    │    │    SUBJECT.DBF (database)
  3696.        │    │    │    ADDRESS.DBF (database)
  3697.        │    ├────CENTER (procedure in TODOPRC.PRG)
  3698.        │    ├────SETDATE.PRG
  3699.        │    ├────SETPRT.PRG
  3700.        │    │    │    PRTCODES.DBF (database)
  3701.        │    │    ├────SCRHEAD (procedure in TODOPRC.PRG)
  3702.        │    │    │    └────SETCOLOR (procedure in TODOPRC.PRG)
  3703.        │    │    └────ERRORMSG (procedure in TODOPRC.PRG)
  3704.        │    │         ├────SETCOLOR (procedure in TODOPRC.PRG)
  3705.        │    │         └────CENTER (procedure in TODOPRC.PRG)
  3706.        │    ├────F2_HANDLR (procedure in TODOPRC.PRG)
  3707.        │    │    ├────ADDRLIST.PRG
  3708.        │    │    │    └────SETCOLOR (procedure in TODOPRC.PRG)
  3709.        │    │    └────NUMLIST.PRG
  3710.        │    │         └────SETCOLOR (procedure in TODOPRC.PRG)
  3711.        │    ├────F3_HANDLR (procedure in TODOPRC.PRG)
  3712.  
  3713.        and so forth
  3714.  
  3715.  
  3716.  
  3717.  
  3718.  
  3719.                                            61
  3720.  
  3721.  
  3722.  
  3723.  
  3724.  
  3725.  
  3726.  
  3727.  
  3728.        System: ToDo -- To Do Management System
  3729.        Author: Walter J. Kennamer
  3730.        03/02/88   18:55:52
  3731.        Procedure and Function Summary
  3732.  
  3733.        -------------------------------------------------------------------------
  3734.  
  3735.        2 procedure files in the system
  3736.           SUBJECT.PRG
  3737.           TODOPRC.PRG
  3738.        -------------------------------------------------------------------------
  3739.  
  3740.        SUBJECT.PRG -- Last updated:  12/30/87 at   8:47
  3741.  
  3742.           Contains: SUBOK()               (Params: SUBNAME)
  3743.                  Calls: SETCOLOR          (procedure in TODOPRC.PRG)
  3744.                  Calls: CENTER            (procedure in TODOPRC.PRG)
  3745.                  Calls: PUTSUB            (procedure in TODOPRC.PRG)
  3746.           Contains: SUBLOOK()             (Params: M_SUBNAME)
  3747.                  Calls: SETCOLOR          (procedure in TODOPRC.PRG)
  3748.                    .
  3749.                    .
  3750.                    .
  3751.           Contains: SUBEDIT               (Params: none)
  3752.              Called by: ED()              (function in SUBJECT.PRG)
  3753.                  Calls: SETCOLOR          (procedure in TODOPRC.PRG)
  3754.  
  3755.        -------------------------------------------------------------------------
  3756.        TODOPRC.PRG -- Last updated:  12/28/87 at  14:20
  3757.  
  3758.  
  3759.           Contains: F2_HANDLR             (Params: none)
  3760.              Called by: TODO.PRG
  3761.              Called by: TDDEFLT.PRG
  3762.                  Calls: ADDRLIST.PRG
  3763.                  Calls: NUMLIST.PRG
  3764.           Contains: F3_HANDLR             (Params: none)
  3765.              Called by: TODO.PRG
  3766.              Called by: TDDEFLT.PRG
  3767.                  Calls: SETCOLOR          (procedure in TODOPRC.PRG)
  3768.           Contains: F4_HANDLR             (Params: none)
  3769.              Called by: TODO.PRG
  3770.              Called by: TDDEFLT.PRG
  3771.                    .
  3772.                    .
  3773.                    .
  3774.           Contains: ISCTRL()              (Params: none)
  3775.           Contains: SCREEN_ON             (Params: none)
  3776.              Called by: ROLODEX.PRG
  3777.           Contains: PRINT_ON              (Params: none)
  3778.              Called by: ROLODEX.PRG
  3779.  
  3780.                                            62
  3781.  
  3782.  
  3783.  
  3784.  
  3785.  
  3786.  
  3787.  
  3788.  
  3789.        System: ToDo -- To Do Management System
  3790.        Author: Walter J. Kennamer
  3791.        03/02/88   18:55:42
  3792.        Database Structure Summary
  3793.  
  3794.        -------------------------------------------------------------------------
  3795.  
  3796.        3 databases in the system
  3797.           HELP.DBF
  3798.           TODO.DBF
  3799.           SUBJECT.DBF
  3800.        -------------------------------------------------------------------------
  3801.  
  3802.        Structure for database : HELP.DBF
  3803.        Number of data records :      37
  3804.                  Last updated :  09/09/87 at  11:06
  3805.        Field  Field name  Type        Width    Dec    Start      End
  3806.            1  HCALLPRG    Character       8               1        8
  3807.            2  HINPUTVAR   Character      12               9       20
  3808.            3  HSCRNNUM    Character       4              21       24
  3809.            4  HELPMSG     Memo           10              25       34
  3810.        ** Total **                       35
  3811.  
  3812.  
  3813.        This database is associated with the memo file: HELP.DBT
  3814.  
  3815.        This database appears to be associated with index file(s):
  3816.               : HELPKEY.NTX  (UPPER(hcallprg+hscrnnum+hinputvar))
  3817.  
  3818.        SNAP! did not find any associated report forms
  3819.  
  3820.        Used by: HELP.PRG
  3821.               : TDFIX.PRG
  3822.               : TDREINDX.PRG
  3823.               : TDREPAIR       (procedure in TDFIX.PRG)
  3824.  
  3825.        -------------------------------------------------------------------------
  3826.  
  3827.  
  3828.        Structure for database : TODO.DBF
  3829.        Number of data records :     112
  3830.                  Last updated :  03/01/88 at  17:35
  3831.        Field  Field name  Type        Width    Dec    Start      End
  3832.            1  ITEM        Character      55               1       55
  3833.            2  PRIORITY    Character       1              56       56
  3834.            3  DATE_DUE    Date            8              57       64
  3835.            4  CALTIME     Character       5              65       69
  3836.            5  COMPLETE    Character       1              70       70
  3837.            6  ADVANCE     Numeric         3              71       73
  3838.            7  DATE_ASGN   Date            8              74       81
  3839.            8  DATE_COMP   Date            8              82       89
  3840.  
  3841.                                            63
  3842.  
  3843.  
  3844.  
  3845.  
  3846.  
  3847.  
  3848.  
  3849.            9  LATE        Numeric         3              90       92
  3850.           10  ITEMTYPE    Character       1              93       93
  3851.           11  ALARM       Character       1              94       94
  3852.           12  SUBJECT     Character      30              95      124
  3853.           13  DURATION    Numeric         8      2      125      132
  3854.           14  VERSION     Character       5             133      137
  3855.        ** Total **                      138
  3856.  
  3857.  
  3858.        This database appears to be associated with index file(s):
  3859.               : TODODD.NTX   (DTOS(date_due)+priority+caltime)
  3860.               : DATEDUE.NDX  (index key not found)
  3861.  
  3862.        This database appears to be associated with multiple index file(s):
  3863.               : TODO.MDX
  3864.  
  3865.        SNAP! did not find any associated report forms
  3866.  
  3867.        Used by: TDSETUP.PRG
  3868.               : TDINPUT.PRG
  3869.               : OPENDATA       (procedure in TDSETUP.PRG)
  3870.               : EDITEXIT.PRG
  3871.               : TDREDATE.PRG
  3872.               : TDPURGE.PRG
  3873.               : TDFIX.PRG
  3874.               : TDCAL.PRG
  3875.               : TDREINDX.PRG
  3876.  
  3877.        -------------------------------------------------------------------------
  3878.  
  3879.  
  3880.        Structure for database : SUBJECT.DBF
  3881.        Number of data records :      41
  3882.                  Last updated :  01/12/88 at   9:34
  3883.        Field  Field name  Type        Width    Dec    Start      End
  3884.            1  SUBCODE     Character      20               1       20
  3885.            2  SUBJECT     Character      30              21       50
  3886.        ** Total **                       51
  3887.  
  3888.  
  3889.        This database appears to be associated with index file(s):
  3890.               : SUBJECT.NTX  (UPPER(subject))
  3891.  
  3892.        SNAP! did not find any associated report forms
  3893.  
  3894.        Used by: TDSETUP.PRG
  3895.               : TDINPUT.PRG
  3896.               : OPENDATA       (procedure in TDSETUP.PRG)
  3897.               : TDREINDX.PRG
  3898.  
  3899.  
  3900.  
  3901.  
  3902.                                            64
  3903.  
  3904.  
  3905.  
  3906.  
  3907.  
  3908.  
  3909.  
  3910.        -------------------------------------------------------------------------
  3911.        System: ToDo -- To Do Management System
  3912.        Author: Walter J. Kennamer
  3913.        03/02/88   18:55:49
  3914.        Data Dictionary
  3915.        -------------------------------------------------------------------------
  3916.  
  3917.        Note: the actual system used more than 3 databases.  All but three were
  3918.        removed above to save space.  This portion of the report shows all of
  3919.        them.
  3920.  
  3921.        Field Name         Type    Len   Dec     Database
  3922.        ABBREV              C       2     0     AREACODE.DBF
  3923.        ADDRESS             C      53     0     ADDRESS.DBF
  3924.        ADVANCE             N       3     0     TODO.SKL
  3925.                                                TODO.DBF
  3926.                                                HIST.DBF
  3927.        ALARM               C       1     0     TODO.SKL
  3928.                                                TODO.DBF
  3929.                                                HIST.DBF
  3930.        AREACODE            N       3     0     AREACODE.DBF
  3931.        BPHONE              C      12     0     ADDRESS.DBF
  3932.        CALTIME             C       5     0     TODO.SKL
  3933.                                                TODO.DBF
  3934.                                                HIST.DBF
  3935.        CITIES              C      78     0     AREACODE.DBF
  3936.        CITY                C      25     0     ADDRESS.DBF
  3937.        COL                 N       2     0     PRTCODES.DBF
  3938.        COMMENT             C      50     0     ADDRESS.DBF
  3939.        COMPANY             C      53     0     ADDRESS.DBF
  3940.        COMPLETE            C       1     0     TODO.SKL
  3941.                                                TODO.DBF
  3942.                                                HIST.DBF
  3943.        COMPRESS            C      13     0     PRTCODES.DBF
  3944.        COUNTRY             C      20     0     ADDRESS.DBF
  3945.        DATE_ASGN           D       8     0     TODO.SKL
  3946.                                                TODO.DBF
  3947.                                                HIST.DBF
  3948.        DATE_COMP           D       8     0     TODO.SKL
  3949.                                                TODO.DBF
  3950.                                                HIST.DBF
  3951.        DATE_DUE            D       8     0     TODO.SKL
  3952.                                                TODO.DBF
  3953.                                                HIST.DBF
  3954.        DURATION            N       8     2     TODO.SKL
  3955.                                                TODO.DBF
  3956.        ELITE               C      13     0     PRTCODES.DBF
  3957.        FORMFEED            C      13     0     PRTCODES.DBF
  3958.        HCALLPRG            C       8     0     HELP.DBF
  3959.        HELPMSG             M      10     0     HELP.DBF
  3960.        HINPUTVAR           C      12     0     HELP.DBF
  3961.        HSCRNNUM            C       4     0     HELP.DBF
  3962.  
  3963.                                            65
  3964.  
  3965.  
  3966.  
  3967.  
  3968.  
  3969.  
  3970.  
  3971.        ITEM                C      55     0     TODO.SKL
  3972.                                                TODO.DBF
  3973.                                                HIST.DBF
  3974.        ITEMTYPE            C       1     0     TODO.SKL
  3975.                                                TODO.DBF
  3976.                                                HIST.DBF
  3977.        LATE                N       3     0     TODO.SKL
  3978.                                                TODO.DBF
  3979.                                                HIST.DBF
  3980.        LINE                C      78     0     TEMP.DBF
  3981.                                                PRM.SKL
  3982.        NAME                C      30     0     ADDRESS.DBF
  3983.        NAME                C      25     0     PRTCODES.DBF
  3984.        NOTES               M      10     0     ADDRESS.DBF
  3985.                                                NOTEPAD.DBF
  3986.        PHONE               C      12     0     ADDRESS.DBF
  3987.        POSITION            C      40     0     ADDRESS.DBF
  3988.        PRIORITY            C       1     0     TODO.SKL
  3989.                                                TODO.DBF
  3990.                                                HIST.DBF
  3991.        PRTNUM              N       2     0     PRTCODES.DBF
  3992.        RESET               C      13     0     PRTCODES.DBF
  3993.        ROW                 N       2     0     PRTCODES.DBF
  3994.        SECONDLINE          C      53     0     ADDRESS.DBF
  3995.        STATE               C       2     0     ADDRESS.DBF
  3996.        STATE               C      15     0     AREACODE.DBF
  3997.        SUBCODE             C      20     0     SUBJECT.DBF
  3998.        SUBJECT             C      30     0     TODO.SKL
  3999.                                                TODO.DBF
  4000.                                                SUBJECT.DBF
  4001.                                                HIST.DBF
  4002.        VERSION             C       5     0     TODO.SKL
  4003.                                                TODO.DBF
  4004.                                                NOTEPAD.DBF
  4005.        ZIP                 C      10     0     ADDRESS.DBF
  4006.  
  4007.  
  4008.  
  4009.  
  4010.  
  4011.  
  4012.  
  4013.  
  4014.  
  4015.  
  4016.  
  4017.  
  4018.  
  4019.  
  4020.  
  4021.  
  4022.  
  4023.  
  4024.                                            66
  4025.  
  4026.  
  4027.  
  4028.  
  4029.  
  4030.  
  4031.  
  4032.        System: ToDo -- To Do Management System
  4033.        Author: Walter J. Kennamer
  4034.        03/02/88   18:55:15
  4035.        Index Parameter Summary
  4036.  
  4037.        -------------------------------------------------------------------------
  4038.  
  4039.        5 index files in the system
  4040.           HELPKEY.NDX
  4041.           SUBJECT.NDX
  4042.           TODODD.NDX
  4043.           &NTXNAME
  4044.           DATEDUE.NDX
  4045.        -------------------------------------------------------------------------
  4046.  
  4047.        HELPKEY.NTX -- Indexed on: UPPER(hcallprg+hscrnnum+hinputvar)
  4048.        Last updated:  09/09/87 at  11:06
  4049.  
  4050.  
  4051.        This index file appears to be associated with database(s):
  4052.               : HELP.DBF
  4053.  
  4054.        Used by: HELP.PRG
  4055.               : TDFIX.PRG
  4056.               : TDREINDX.PRG
  4057.               : TDREPAIR       (procedure in TDFIX.PRG)
  4058.  
  4059.        -------------------------------------------------------------------------
  4060.        SUBJECT.NTX -- Indexed on: UPPER(subject)
  4061.        Last updated:  01/12/88 at   9:16
  4062.  
  4063.  
  4064.        This index file appears to be associated with database(s):
  4065.               : SUBJECT.DBF
  4066.  
  4067.        Used by: SUBLOOK()      (function  in SUBJECT.PRG)
  4068.               : PART_MATCH()   (function  in SUBJECT.PRG)
  4069.               : TDSETUP.PRG
  4070.               : TDINPUT.PRG
  4071.               : OPENDATA       (procedure in TDSETUP.PRG)
  4072.               : TDFIX.PRG
  4073.               : TDREINDX.PRG
  4074.               : TDREPAIR       (procedure in TDFIX.PRG)
  4075.  
  4076.        -------------------------------------------------------------------------
  4077.        TODODD.NTX -- Indexed on: DTOS(date_due)+priority+caltime
  4078.        Last updated:  03/01/88 at  17:35
  4079.  
  4080.  
  4081.        This index file appears to be associated with database(s):
  4082.               : TODO.DBF
  4083.  
  4084.  
  4085.                                            67
  4086.  
  4087.  
  4088.  
  4089.  
  4090.  
  4091.  
  4092.  
  4093.        Used by: TDSETUP.PRG
  4094.               : TDINPUT.PRG
  4095.               : EDITEXIT.PRG
  4096.               : EDITSRCH.PRG
  4097.               : TDREDATE.PRG
  4098.               : TDPURGE.PRG
  4099.               : EDITCHGE.PRG
  4100.               : TDFIX.PRG
  4101.               : PRTUNCMP.PRG
  4102.               : TDREINDX.PRG
  4103.               : TDREPAIR       (procedure in TDFIX.PRG)
  4104.  
  4105.        -------------------------------------------------------------------------
  4106.        &NTXNAME is a macro unknown to SNAP!
  4107.  
  4108.        This index file appears to be associated with database(s):
  4109.               : ADDRESS.DBF
  4110.  
  4111.        Used by: TDSETUP.PRG
  4112.               : OPENDATA       (procedure in TDSETUP.PRG)
  4113.               : ADDRESS.PRG
  4114.               : TDFIX.PRG
  4115.               : TDREINDX.PRG
  4116.               : TDREPAIR       (procedure in TDFIX.PRG)
  4117.               : ADDRBOOK.PRG
  4118.               : ROLODEX.PRG
  4119.  
  4120.        -------------------------------------------------------------------------
  4121.        File not found--DATEDUE.NDX
  4122.  
  4123.        This index file appears to be associated with database(s):
  4124.               : TODO.DBF
  4125.  
  4126.        Used by: TDCAL.PRG
  4127.               : TDCALDAY.PRG
  4128.  
  4129.  
  4130.  
  4131.  
  4132.  
  4133.  
  4134.  
  4135.  
  4136.  
  4137.  
  4138.  
  4139.  
  4140.  
  4141.  
  4142.  
  4143.  
  4144.  
  4145.  
  4146.                                            68
  4147.  
  4148.  
  4149.  
  4150.  
  4151.  
  4152.  
  4153.  
  4154.        System: ToDo -- To Do Management System
  4155.        Author: Walter J. Kennamer
  4156.        03/02/88   18:55:15
  4157.        Multiple Index Summary
  4158.  
  4159.        -------------------------------------------------------------------------
  4160.  
  4161.        1 multiple index file in the system
  4162.           TODO.MDX
  4163.        -------------------------------------------------------------------------
  4164.  
  4165.        TODO.MTX--Last updated:  09/09/87 at  11:06
  4166.               TAG : TDITEM  (item)
  4167.               TAG : TDPRIOR (priority+itemtype)
  4168.  
  4169.        This multiple index file appears to be associated with database(s):
  4170.               : TODO.DBF
  4171.  
  4172.        Used by: TODO.PRG
  4173.  
  4174.  
  4175.  
  4176.  
  4177.  
  4178.  
  4179.  
  4180.  
  4181.  
  4182.  
  4183.  
  4184.  
  4185.  
  4186.  
  4187.  
  4188.  
  4189.  
  4190.  
  4191.  
  4192.  
  4193.  
  4194.  
  4195.  
  4196.  
  4197.  
  4198.  
  4199.  
  4200.  
  4201.  
  4202.  
  4203.  
  4204.  
  4205.  
  4206.  
  4207.                                            69
  4208.  
  4209.  
  4210.  
  4211.  
  4212.  
  4213.  
  4214.  
  4215.        System: ToDo -- To Do Management System
  4216.        Author: Walter J. Kennamer
  4217.        03/02/88   18:55:50
  4218.        Report Form File Summary
  4219.  
  4220.        -------------------------------------------------------------------------
  4221.  
  4222.        2 report forms in the system
  4223.           SUBREPT.FRM
  4224.           TDSUMIN.FRM
  4225.         ------------------------------------------------------------------------
  4226.  
  4227.        SUBREPT.FRM                              Last updated:  08/24/87 at  10:14
  4228.           Summary report?  No
  4229.           Eject page before printing?  No       Eject page after printing?  Yes
  4230.           Double space report?  No              Plain page?  No
  4231.           Left margin:    8                     Right Margin:    0
  4232.  
  4233.          
  4234.      -------------------------------------------------------------------------
  4235.                                         Report Contents
  4236.          
  4237.      -------------------------------------------------------------------------
  4238.        No.   Field                               Length    Decimals     Totaled?
  4239.        ---   ----------------------------------  ------    --------     --------
  4240.  
  4241.          1   Subject                                 40        0            No
  4242.          2   Subcode                                 25        0            No
  4243.                                                   -----
  4244.                                                      65
  4245.                                                   =====
  4246.  
  4247.  
  4248.           -----------------------------------------------------------------------
  4249.                                           Report Layout
  4250.           -----------------------------------------------------------------------
  4251.        Page No.     1
  4252.        00/00/00
  4253.  
  4254.                                                  Subject Codes
  4255.  
  4256.        Subject                                  Charge Code
  4257.        1                                        2
  4258.  
  4259.           ----------------------------------------------------------------------
  4260.                       Database and Program References
  4261.           ----------------------------------------------------------------------
  4262.  
  4263.           SNAP! could not find an associated database
  4264.  
  4265.           Used by: SUBREPT        (procedure in SUBJECT.PRG)
  4266.  
  4267.  
  4268.                                            70
  4269.  
  4270.  
  4271.  
  4272.  
  4273.  
  4274.  
  4275.  
  4276.  
  4277.  
  4278.  
  4279.  
  4280.        TDSUMIN.FRM                             Last updated:  09/01/87 at  15:17
  4281.           Summary report?  No
  4282.           Eject page before printing?  Yes      Eject page after printing?  Yes
  4283.           Double space report?  Yes             Plain page?  No
  4284.           Left margin:    1                     Right Margin:    0
  4285.  
  4286.          
  4287.      -------------------------------------------------------------------------
  4288.                                         Report Contents
  4289.          
  4290.      -------------------------------------------------------------------------
  4291.        No.   Field                               Length    Decimals     Totaled?
  4292.        ---   ----------------------------------  ------    --------     --------
  4293.  
  4294.          1   "______"                                 6        0            No
  4295.          2   RECNO()                                  4        0            No
  4296.          3   Item                                    55        0            No
  4297.          4   " "+dtoc(date_due)                       9        0            No
  4298.          5   Caltime                                  6        0            No
  4299.                                                   -----
  4300.                                                      80
  4301.                                                   =====
  4302.  
  4303.  
  4304.          ----------------------------------------------------------------------
  4305.                                    Report Layout
  4306.          ----------------------------------------------------------------------
  4307.        Page No.     1
  4308.        00/00/00
  4309.  
  4310.  
  4311.  
  4312.                                                Uncompleted Items
  4313.  
  4314.               No.  Item                                        Due Date  Time
  4315.               ===  =========================================== ========= =====
  4316.          1    2    3                                           4         5
  4317.  
  4318.  
  4319.           ----------------------------------------------------------------------
  4320.                       Database and Program References
  4321.           ----------------------------------------------------------------------
  4322.  
  4323.           SNAP! could not find an associated database
  4324.  
  4325.           Used by: PRTUNCMP.PRG
  4326.  
  4327.  
  4328.  
  4329.                                            71
  4330.  
  4331.  
  4332.  
  4333.  
  4334.  
  4335.  
  4336.  
  4337.        System: ToDo -- To Do Management System
  4338.        Author: Walter J. Kennamer
  4339.        03/02/88   18:55:58
  4340.        Token Cross-Reference Report
  4341.  
  4342.        ------------------------------------------------------------------------
  4343.  
  4344.        622 tokens are included in this report.
  4345.  
  4346.  
  4347.        Legend for context symbols:
  4348.           (blank) reference does not change the variable or field value.
  4349.           = variable or field is changed in an assignment statement.
  4350.           x variable is released.
  4351.           A array is declared.
  4352.           G GET statement changes variable or field.
  4353.           P variable is declared PUBLIC.
  4354.           R field is replaced.
  4355.           U database is USEd
  4356.           V variable is declared PRIVATE.
  4357.           & variable is referenced in a macro--takes preference over all others.
  4358.           @ variable passed as a var parameter--Clipper only
  4359.           ? reference is of unknown type.
  4360.  
  4361.        ABBREV
  4362.           AREACODE.PRG     90   134   178
  4363.  
  4364.        ABORT
  4365.           TDINPUT.PRG      62x   67P  306=
  4366.           EDITSRCH.PRG     35=   69=   99=
  4367.           EDITCHGE.PRG     32=
  4368.  
  4369.        ACCESSES
  4370.           TODO.PRG        130
  4371.           TDEXIT.PRG       24
  4372.  
  4373.           .
  4374.           .
  4375.           .
  4376.  
  4377.        YESNO
  4378.           ADDRESS.PRG     476=  482G  482   484   663=  664   665=  668G  668     
  4379.                           748=  751G  751   753
  4380.  
  4381.        YR
  4382.           TDCOPY.PRG      109=  116=  116   122   126   128   224   226   241=    
  4383.                           248   255   262   264   277
  4384.  
  4385.        ZIP
  4386.           ADDRESS.PRG     130   227   282   301R  336R  363
  4387.           ADDRBOOK.PRG     85    86    88
  4388.           ROLODEX.PRG     180   181   183
  4389.  
  4390.                                            72
  4391.  
  4392.  
  4393.  
  4394.  
  4395.  
  4396.  
  4397.  
  4398.  
  4399.  
  4400.  
  4401.  
  4402.  
  4403.  
  4404.  
  4405.  
  4406.  
  4407.  
  4408.  
  4409.  
  4410.  
  4411.  
  4412.  
  4413.  
  4414.  
  4415.  
  4416.  
  4417.  
  4418.  
  4419.  
  4420.  
  4421.  
  4422.  
  4423.  
  4424.  
  4425.  
  4426.  
  4427.  
  4428.  
  4429.  
  4430.  
  4431.  
  4432.  
  4433.  
  4434.  
  4435.  
  4436.  
  4437.  
  4438.  
  4439.  
  4440.  
  4441.  
  4442.  
  4443.  
  4444.  
  4445.  
  4446.  
  4447.  
  4448.  
  4449.  
  4450.  
  4451.                                            73
  4452.  
  4453.  
  4454.  
  4455.  
  4456.  
  4457.  
  4458.  
  4459.        System: ToDo -- To Do Management System
  4460.        Author: Walter J. Kennamer
  4461.        03/02/88   18:56:06
  4462.        Public Variable Summary
  4463.  
  4464.        ------------------------------------------------------------------------
  4465.  
  4466.  
  4467.        These variables were declared PUBLIC somewhere in the system.
  4468.        Some may also be used as private variables in some parts of the code.
  4469.  
  4470.        ABORT                                   ADDR_MROW
  4471.        ANSWER                                  CARD_ROWS
  4472.        CLIPPER                                 CMD_LINE
  4473.        C_OFFSET                                DATE_STR
  4474.            .
  4475.            .
  4476.            .
  4477.        S_TESTDATE                              S_VERSION
  4478.        T_COMP                                  T_DATED
  4479.        T_DUR                                   T_ITEM
  4480.        T_ITEMTYPE                              T_PRIOR
  4481.        T_SUBJ                                  T_TIME
  4482.  
  4483.  
  4484.  
  4485.  
  4486.  
  4487.  
  4488.  
  4489.  
  4490.  
  4491.  
  4492.  
  4493.  
  4494.  
  4495.  
  4496.  
  4497.  
  4498.  
  4499.  
  4500.  
  4501.  
  4502.  
  4503.  
  4504.  
  4505.  
  4506.  
  4507.  
  4508.  
  4509.  
  4510.  
  4511.  
  4512.                                            74
  4513.  
  4514.  
  4515.  
  4516.  
  4517.  
  4518.  
  4519.  
  4520.        System: ToDo -- To Do Management System
  4521.        Author: Walter J. Kennamer
  4522.        03/02/88   18:56:06
  4523.        Macro Summary
  4524.  
  4525.        ------------------------------------------------------------------------
  4526.  
  4527.  
  4528.           Macros Defined to SNAP!
  4529.           ----------------------------------------------------------------------
  4530.  
  4531.           Variable       Expansion
  4532.           -------------- ---------------------------------
  4533.  
  4534.           S_TDFILE        TODO
  4535.           S_DDNDX         TODODD
  4536.           S0_ADFNAME      ADDRESS
  4537.  
  4538.           ----------------------------------------------------------------------
  4539.           Macros Not Defined to SNAP!
  4540.           ----------------------------------------------------------------------
  4541.  
  4542.           &BAK_NAME                               &B_FILE
  4543.           &COLR_STR                               &FIELD1
  4544.           &FIELD2                                 &FIELD_NAME
  4545.           &FILT_STR                               &FLDNAME
  4546.           &FNAME                                  &IN_DB
  4547.           &IN_SELECT                              &IN_VAL
  4548.           &M_WORKAREA                             &NTXNAME
  4549.           &NUM                                    &PROGNAME
  4550.           &REP_FNAME                              &REV_COLR
  4551.           &S0_COLR1                               &S0_COLR2
  4552.           &S0_DATA                                &S0_PRMNAME
  4553.           &S0_PROGRAM                             &S0_USERFILT
  4554.           &SRCHFLD                                &TEMPIN
  4555.  
  4556.        ------------------------------------------------------------------------
  4557.        System: ToDo -- To Do Management System
  4558.        Author: Walter J. Kennamer
  4559.        03/02/88   18:56:06
  4560.        Array Summary
  4561.  
  4562.        ------------------------------------------------------------------------
  4563.        An array declared with a variable (e.g., DECLARE foo[bar])
  4564.        will be shown as having a size of [var].
  4565.  
  4566.        FIELD_LENGTH[var]
  4567.        FIELD_LIST[2]
  4568.  
  4569.  
  4570.  
  4571.  
  4572.  
  4573.                                            75
  4574.  
  4575.  
  4576.  
  4577.  
  4578.  
  4579.  
  4580.  
  4581.  
  4582.        System: ToDo -- To Do Management System
  4583.        Author: Walter J. Kennamer
  4584.        03/02/88   18:56:29
  4585.        File List
  4586.        ------------------------------------------------------------------------
  4587.  
  4588.        Programs and procedures:
  4589.          ADDRBOOK.PRG
  4590.          ADDRESS.PRG
  4591.          ADDRFILT()        (function  in ADDRESS.PRG)
  4592.          ADDRLIST.PRG
  4593.              .
  4594.              .
  4595.              .
  4596.          TIMEFORM()        (function  in TDCALDAY.PRG)
  4597.          TODO.PRG
  4598.          UNHIGHLIGHT       (procedure in SHOWCAL.PRG)
  4599.          VERPRT.PRG
  4600.  
  4601.        Procedure files:
  4602.          SUBJECT.PRG
  4603.          TODOPRC.PRG
  4604.  
  4605.        Databases:
  4606.             .
  4607.             .
  4608.             .
  4609.          HELP.DBF
  4610.          HELP.DBT
  4611.          SUBJECT.DBF
  4612.          TODO.DBF
  4613.  
  4614.        Index files:
  4615.          &NTXNAME
  4616.          DATEDUE.NDX
  4617.          DATEDUE.NTX
  4618.          HELPKEY.NTX
  4619.          HISTDD.NTX
  4620.          PRIORITY.NDX
  4621.          SUBJECT.NTX
  4622.          TODODD.NTX
  4623.  
  4624.        Report forms:
  4625.          SUBREPT.FRM
  4626.          TDDETIN.FRM
  4627.          TDSUMIN.FRM
  4628.  
  4629.        Memory files:
  4630.          ACCESSES.MEM
  4631.          CLIP.MEM
  4632.          DEFAULT.MEM
  4633.  
  4634.                                            76
  4635.  
  4636.  
  4637.  
  4638.  
  4639.  
  4640.  
  4641.  
  4642.  
  4643.                                          Index
  4644.  
  4645.              4PRINT  . . . . . . . . . . . . . . . . . . . . . . . . 12, 13
  4646.              Abbreviations . . . . . . . . . . . . . . . . . . . . . . .  9
  4647.              Acknowledgements  . . . . . . . . . . . . . . . . . . . . . 55
  4648.              Action diagrams . . . . . . 2, 4, 7, 10, 12, 20, 38-42, 47, 60
  4649.                User-defined symbols  . . . . . . . . . . . . . . . . . . 41
  4650.              Ashton-Tate . . . . . . . . . . . . . . . . . . . . . .  1, 53
  4651.              Association of Shareware Professionals  . . . . . . . . . . 54
  4652.              Backup
  4653.                Importance of   . . . . . . . . . . . . . . . . . . . . .  6
  4654.              Batch operation . . . . . . . . . . . . . . . . . . . . . . 44
  4655.              Blank lines, suppression of . . . . . . . . . . . . . . . . 23
  4656.              Break Statements  . . . . . . . . . . . . . . . . . 21, 41, 47
  4657.              Capitalization  .  2, 5, 10, 18, 21-24, 34, 35, 40, 47, 50, 52
  4658.              Change history  . . . . . . . . . . . . . . . . . . . . . . 49
  4659.              Clipper
  4660.                Index files   . . . . . . . . 11, 30, 43, 59, 63, 64, 67, 76
  4661.              Command line switches
  4662.                /A -- Alternate CASE indenting  . . . . . . . . . . . . . 21
  4663.                /BW -- black and white  . . . . . . . . . . . . . . . . . 48
  4664.                /F -- Configuration file name   . . . . . . . . . . . . .  9
  4665.                /M -- macro file name   . . . . . . . . . . . . . . . . . 14
  4666.                /O -- omit macros   . . . . . . . . . . . . . . . . . . . 14
  4667.                /S -- Echo reports to screen  . . . . . . . . . . . . . . 26
  4668.                /T -- SNAP! tag (changing *#)   . . . . . . . . . . . . . 14
  4669.                /X -- immediate mode (batch)  . . . . . . . . . . . . . . 44
  4670.              Comments
  4671.                Putting them back in, design difficulties surrounding   . 23
  4672.                Suppression of  . . . . . . . . . . . . . . . . . . . . . 23
  4673.              Compuserve  . . . . . . . . . . . . . . . . . . . . . .  53-55
  4674.              CONFIG.SNP  . . . . . . . . . . . . . . . . . . . . . .  9, 44
  4675.              Configuration file  . . . . . . . . . . . . . . . .  9, 41, 44
  4676.                CONFIG.SNP  . . . . . . . . . . . . . . . . . . . . .  9, 44
  4677.                Retrieving configuration settings   . . . . . . . . . . .  9
  4678.                Saving configuration settings   . . . . . . . . . . . . .  9
  4679.              Continuation lines  . . . . . . . . . . . . . . . .  3, 47, 48
  4680.              Control structure . . . . . . . . . . . 20, 21, 39, 41, 46, 47
  4681.              Cross-reference . . 2, 4, 5, 7, 10, 17, 18, 24, 26, 32-35, 42,
  4682.                                                          47, 48, 51, 60, 72
  4683.                Key words   . . . . . . . . . . . . . . . . . . . . . 23, 34
  4684.                Legend  . . . . . . . . . . . . . . . . . . . . . . . . . 33
  4685.                Limitation of type flagging   . . . . . . . . . . . . . . 34
  4686.                Limiting to PUBLIC variables  . . . . . . . . . . . . . . 35
  4687.                Numeric constants   . . . . . . . . . . . . . . . . . . . 33
  4688.                Quoted strings excluded from  . . . . . . . . . . . . . . 33
  4689.                What is included  . . . . . . . . . . . . . . . . . . . . 32
  4690.              Data dictionary . . . . . . . . . . .  2, 4, 26, 28-30, 51, 65
  4691.              dBASE II  . . . . . . . . . . . .  1, 5, 7, 11, 24, 30, 31, 33
  4692.              dBASE III . . . . . . . .  1, 5, 7, 11, 24, 30, 31, 35, 36, 51
  4693.              dBASE IV                1, 5, 7, 8, 11, 24, 28, 31, 35, 36, 49
  4694.  
  4695.                                            77
  4696.  
  4697.  
  4698.  
  4699.  
  4700.  
  4701.  
  4702.  
  4703.              DBXL  . . . . . . . . . . . . . . . . . . . . . . . . . . .  5
  4704.              DBxWORDS.SNP  . . . . . . . . . . . . . . . . . . . 21, 22, 35
  4705.                DB2WORDS.SNP  . . . . . . . . . . . . . . . . . . . .  7, 24
  4706.                DB3WORDS.SNP  . . . . . . . . . . . . . . . . . .  7, 24, 35
  4707.                DB4WORDS.SNP  . . . . . . . . . . . . . . . .  7, 24, 25, 50
  4708.              Documentation files
  4709.                Printing  . . . . . . . . . . . . . . . . . . . . . . . . 11
  4710.              Elapsed time  . . . . . . . . . . . . . . . . . . . . . . . 10
  4711.              Errors  . . . . . . . . . . . . . . 10, 21, 39, 40, 44, 47, 60
  4712.                ERROR.DOC   . . . . . . . . . . . . . . . . . . . . . 10, 60
  4713.              Field names . . . . . . . . . . . . . . . . . .  22, 33, 63-65
  4714.              Format files  . . . .  2, 4, 8, 10, 15, 19, 27, 31, 37, 59, 60
  4715.              Format screen . . . . . . . . . . . . . . 7, 20, 22-24, 40, 42
  4716.              FoxBASE . . . . . . . . . . .  1, 5, 7, 11, 24, 30, 31, 35, 51
  4717.                Index files   . . . . . . . . . . . . . . . . . . 11, 30, 43
  4718.              FoxPro  . . . . . . . . .  1, 5, 7, 11, 24, 30, 31, 36, 48, 49
  4719.              Functions
  4720.                Capitalization of function names  . . . . . . . . . . 24, 35
  4721.              Hardware, why you should buy more . . . . . . . . . . . . . 46
  4722.              Indentation . . . . . . . . . 2, 5, 10, 17, 18, 20, 21, 47, 52
  4723.                Alternate CASE indenting  . . . . . . . . . . . . . . . . 21
  4724.              Index file  . .  2, 4, 10, 11, 19, 28, 30, 38, 49, 59, 63, 64,
  4725.                                                                   67-69, 76
  4726.                NDX extensions  . . . . . . . 30, 43, 52, 59, 64, 67, 68, 76
  4727.              Input . . . . . . . . . . . . . . . . .  8, 11, 19, 33, 41, 44
  4728.              Key words . . . . . . . . . 2, 7, 10, 18, 22-24, 33-35, 39, 46
  4729.                Capitalization   2, 5, 10, 18, 21-24, 34, 35, 40, 47, 50, 52
  4730.                Cross-referencing of  . . . . . . . . . . . . . . . . 23, 32
  4731.                DBxWORDS.SNP  . . . . . . . . . .  7, 21, 22, 24, 25, 35, 50
  4732.                Duplicates  . . . . . . . . . . . . . . . . . . . . . . . 25
  4733.                Expansion or compression  . . . . . . . . . . . . . . . . 22
  4734.                Including other files   . . . . . . . . . . . . . . . . . 25
  4735.                PERSONAL.KEY  . . . . . . . . . . . . . . . . . . . . 24, 50
  4736.                Peverse use of, punishment for  . . . . . . . . . . . . .  9
  4737.                Special characters in file  . . . . . . . . . . . . . . . 23
  4738.              Korenthal Associates  . . . . . . . . . . . . . . . . . . . 12
  4739.              Label forms . . . . . . . . . . . .  10, 19, 26-28, 51, 52, 59
  4740.              License agreement . . . . . . . . . . . . . . . . . . . . .  1
  4741.              Limitations . . . . . . . . . . . . . . . . . . . . . . . . 46
  4742.              Link  . . . . . . . . . . . . . . . . . . . . . . .  4, 36, 52
  4743.                LINK.SNP  . . . . . . . . . . . . . . . . . . . . . . . . 36
  4744.                PLINK86   . . . . . . . . . . . . . . . . . . . .  4, 36, 52
  4745.              MACRO.SNP . . . . . . . . . . . . . . . . . . . . . . . . . 14
  4746.              Macros  . . .  2, 8, 14-17, 19, 29, 34, 38, 44, 51, 68, 72, 75
  4747.                SNAPMACRO   . . . . . . . . . . . . . . . . . . . . . 14, 20
  4748.              Make
  4749.                Make files  . . . . . 2, 4-7, 10, 20, 23, 36, 37, 46, 52, 54
  4750.                MAKE.INI  . . . . . . . . . . . . . . . . . . . . . . 36, 37
  4751.                MAKEFILE  . . . . . . . . . . . . . . . . . . . . . . 37, 60
  4752.                NDMAKE  . . . . . . . . . . . . . . . . . . . . . . . . . 36
  4753.              Memory files  . . 4, 8, 10, 15, 19, 26, 27, 32, 38, 57, 60, 76
  4754.              Memory requirements . . . . . . . . . . . . . . . . . . . . 46
  4755.  
  4756.                                            78
  4757.  
  4758.  
  4759.  
  4760.  
  4761.  
  4762.  
  4763.  
  4764.              Nantucket . . . . . . . . . . . . . . . . . . . . .  1, 53, 55
  4765.              Narratives  . . . . . . . . . . . . . . . . . . . . . . . . 50
  4766.              NDMAKE  . . . . . . . . . . . . . . . . . . . . . . . . . . 36
  4767.              Other screen  . . . . . . . . . . . . . . . . . . . . . 10, 11
  4768.              Output  . . . . 4, 6-8, 19, 20, 23, 24, 35, 37, 40, 49, 52, 56
  4769.              Paths . . . . . . . . . . . . . . . . . 2, 6-9, 11, 15, 38, 46
  4770.              PERSONAL.KEY  . . . . . . . . . . . . . . . . . . . . . 24, 50
  4771.              PLINK86 . . . . . . . . . . . . . . . . . . . . . .  4, 36, 52
  4772.                LINK.SNP  . . . . . . . . . . . . . . . . . . . . . . . . 36
  4773.              Print screen  . . . . . . . . . . . . . . . . . . . . . . . 43
  4774.                HP LaserJet II setup string   . . . . . . . . . . . . . . 42
  4775.              Printer configuration file  . . . . . . . . . . . . . . . . 26
  4776.              Printing documentation  . . . . . . . . . . . . . . . . . . 11
  4777.                4PRINT  . . . . . . . . . . . . . . . . . . . . . . . . . 12
  4778.                Norton Utilities LP Program   . . . . . . . . . . . . . . 12
  4779.                Reprinting  . . . . . . . . . . . . . . . . . . . 12, 43, 50
  4780.              PRIVATE variables . . . . . . . . . . . . . . .  33-35, 72, 74
  4781.              Procedure files
  4782.                Unique name requirement   . . . . . . . . . . . . . . . . 48
  4783.              ProClip . . . . . . . . . . . . . . . . . . . . . . . . . . 25
  4784.              Program narratives  . . . . . . . . . . . . . . . . . . . . 50
  4785.              PUBLIC variables  . . . . . . .  18, 33-35, 51, 55, 57, 72, 74
  4786.              Quicksilver . . . . . . . . . . . . . . . . . . . . . .  5, 11
  4787.              Recursion (see Recursion) . . . . . . . . . . . . . . . . . 27
  4788.              Registration Fee  . . . . . . . . . . . . . . . . . . . . .  5
  4789.              Report forms  4, 8, 10, 19, 26-28, 31, 37, 59, 60, 63, 64, 70, 76
  4790.              Rettig, Tom . . . . . . . . . . . . . . . . 18, 22, 24, 25, 35
  4791.              SNAP FORMAT . . . . . . . . . . . . . . . . . . . . . . . . 18
  4792.              SNAP XREF . . . . . . . . . . . . . . . . . . . . . . . . . 18
  4793.              SNAP.DOC  . . . . . . . . . . . . . . . . . . . . . . . . .  7
  4794.              SNAP.EXE  . . . . . . . . . . . . . . . . . . . . . . . . .  7
  4795.              SNAP.HLP  . . . . . . . . . . . . . . . . . . . . . . . . .  7
  4796.              SNAP! directives
  4797.                Changing *#   . . . . . . . . . . . . . . . . . . . . . . 14
  4798.                FORMAT  . . . . . . . . . . . . . . . . . . . . . . . . . 18
  4799.                SNAPCODE  . . . . . . . . . . . . . . . . . . . 2, 15-18, 29
  4800.                SNAPMACRO   . . . . . . . . . . . . . . . . .  14-18, 29, 57
  4801.                XREF  . . . . . . . . . . . . . . . . . . . . . . . . . . 18
  4802.              SNAPMACRO . . . . . . . . . . . . . . . . . . . . . . . 14, 20
  4803.              Source code printout  . . . . . . . . . . . . . . . . . . . 41
  4804.                Alternatives to SNAP!   . . . . . . . . . . . . . . . . . 11
  4805.                Printing without documenting  . . . . . . . . . . . . . . 43
  4806.                What files are not printed  . . . . . . . . . . . . . . . 43
  4807.              Support, how to get . . . . . . . . . . . . . . . . . . . . 53
  4808.              System screen . . . . . . . . . . . . . . . . . . . . 6, 9, 15
  4809.              Tabs  . . . . . . . . . . . . . . . . . . . . .  9, 20, 41, 42
  4810.                Spaces instead of   . . . . . . . . . . . . . . . . . . . 20
  4811.              TLINK . . . . . . . . . . . . . . . . . . . . . . .  4, 36, 52
  4812.              TopFile . . . . . . . . . . . . . . .  6-8, 10, 15, 32, 37, 45
  4813.                Explanation of  . . . . . . . . . . . . . . . . . . . . .  6
  4814.              Tree screen . . . . . . . . . . . . . . . . . . . . . . . . 27
  4815.              Turbo Linker  . . . . . . . . . . . . . . . . . . .  4, 36, 52
  4816.  
  4817.                                            79
  4818.  
  4819.  
  4820.  
  4821.  
  4822.  
  4823.  
  4824.  
  4825.              Turbo Pascal  . . . . . . . . . . . . . . . . . . . . . . . 51
  4826.              Updates, how to get . . . . . . . . . . . . . . . . . . . . 53
  4827.              Version Numbers . . . . . . . . . . . . . . . . . . . . . . 53
  4828.  
  4829.  
  4830.  
  4831.  
  4832.  
  4833.  
  4834.  
  4835.  
  4836.  
  4837.  
  4838.  
  4839.  
  4840.  
  4841.  
  4842.  
  4843.  
  4844.  
  4845.  
  4846.  
  4847.  
  4848.  
  4849.  
  4850.  
  4851.  
  4852.  
  4853.  
  4854.  
  4855.  
  4856.  
  4857.  
  4858.  
  4859.  
  4860.  
  4861.  
  4862.  
  4863.  
  4864.  
  4865.  
  4866.  
  4867.  
  4868.  
  4869.  
  4870.  
  4871.  
  4872.  
  4873.  
  4874.  
  4875.  
  4876.  
  4877.  
  4878.                                            80
  4879.  
  4880.